我需要在远程计算机上运行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,即使我明确提到了代码中显示的路径。
为什么会这样,我的问题的解决方案是什么
此致 哎呀
答案 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
。