使用PSTool在远程计算机上运行PowerShell脚本

时间:2011-04-19 10:33:33

标签: sharepoint powershell

我需要在远程计算机上运行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。脚本仅在以80位Powershell图像运行时才能正常运行。

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

为什么会这样,我的问题的解决方案是什么

此致 哎呀

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

以下是三种解决方案:

<强> 1。删除目标计算机上的UAC

<强> 2。 WinRM的

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

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

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