【问题标题】:Running PowerShell script on a remote machine using PSTool使用 PSTool 在远程计算机上运行 PowerShell 脚本
【发布时间】:2011-04-20 03:49:31
【问题描述】:

我需要在远程机器上运行一个 PS 脚本,按照下面的代码进行。

Process psExecer = new Process
            {
                StartInfo =
                {
                    UseShellExecute = false,
                    CreateNoWindow = false,
                    WindowStyle = ProcessWindowStyle.Hidden,
                    FileName = @"c:\PsTools\PsExec.exe",
                    Arguments = @"c:\windows\System32\cmd.exe /k  c:\windows\System32\WindowsPowerShell\v1.0\powershell.exe E:\Scripts\SetUP.ps1 -u super -p Pass -s"        
                }
            };

            psExecer.Start();
            psExecer.WaitForExit();
            Thread.Sleep(5000);  

问题是脚本有一些sharepoint cmdlet,它必须加载sharepoint PSSnapin。脚本只有在 64 位的 Powershell 映像中才能正常运行。

当我尝试使用 PSTool 运行时,PSTool 总是最终从 %windir%\SysWoW64 文件夹调用 32 位 PowerShell,即使我明确提到了代码中显示的路径。

为什么会这样,我的问题有什么解决办法

问候, 天哪

【问题讨论】:

  • 只是好奇,但为什么你加载cmd 然后让它加载powershell,而不是直接运行powershell
  • 尝试直接加载powershell也报同样的错误,所以尝试使用cmd加载,用处不大
  • 我假设这是一个错字,但您声明您需要运行 64 位版本的 powershell,然后从 System32 加载它。您能否更新您的问题以确保没有混淆...?
  • 任何完整的源代码,最终解决方案有效?

标签: sharepoint powershell


【解决方案1】:

当 32 位应用程序引用 c:\windows\System32 时,它会被重定向到 SysWoW64

尝试使用 c:\windows\sysnative\windowspowershell\v1.0\powershell.exe

【讨论】:

  • Jako 你是对的,我遇到了这个问题,因为 PsTool 是一个 32 位应用程序,因此总是调用 32 位 powershell。非常感谢您提供的信息。
【解决方案2】:

您调用的问题是由于 UAC 导致的进程虚拟化的副作用。

这里有三个解决方案:

1.删除目标计算机上的 UAC

2。 WinRM

如果您想在 Windows 2008 R2 和 Windows 7 等目标上远程执行 PowerShell 脚本,最好的方法是使用 WSMan,只需查看about_Remote PowerShell 中的帮助。

3.尝试删除您在远程计算机上调用的进程的虚拟化

要防止虚拟化,请在与要删除虚拟化的 EXE 文件相同的目录中添加清单。清单是一个名为 yourexename.exe.manifest 的 XML 文件。 You can find in this site a manifest sample。尝试将requestedPrivileges 设置为asInvoker

【讨论】:

    猜你喜欢
    • 2014-07-26
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2015-11-06
    • 1970-01-01
    相关资源
    最近更新 更多