Powershell - 同时在多个服务器上运行PsExec

时间:2014-03-22 15:40:31

标签: powershell psexec

如何在多台服务器上并行运行PsExec,并将结果输出到文本文件?类似的东西:

ForEach ($s in $Srvs) {
    Psexec -s -d \\$s someexe.exe > \\$s\c$\temp\$s.txt
}

这不使用-d选项,但是当我添加-d时,输出为空。

我在PS工作流程中尝试了Invoke-Command, Start-Process等,但没有任何关于管道选项“>”的信息。我也尝试了2>2>$&1,没有去。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我怀疑发生了什么:

  • PsExec在您的计算机上运行。
  • 它创建与服务器的连接并启动someexe.exe。
  • 在服务器上运行,输出对PsExec的回复。
  • PsExec在本地获取,并将其打印在本地计算机上。
  • 通过网络将>重定向到服务器上的管理员共享。

使用-d时,PsExec会在从someexe.exe返回任何内容之前退出,因此文件最终为空。

您需要转义>,以便将其作为参数传递给远程命令,而不是在本地解释。我不确定如何在PowerShell中正确地执行此操作,在命令提示符中,转义字符将为^,这似乎在PowerShell中有效,所以可能:

ForEach ($s in $Srvs) {
    Psexec -s -d \\$s someexe.exe ^> \\$s\c$\temp\$s.txt
}

编辑

好的,那不是。我目前的最佳答案是将命令放入批处理文件,例如c:\ scripts \ myscript.bat,使它也启动命令解释器:

cmd /C someexe.exe > c:\temp\%computername%.txt

然后使用PsExec运行,将批处理文件复制到:

ForEach ($s in $srvs) {
    psexec -s -d -c -f \\$s c:\scripts\myscript.bat
}