如何在多台服务器上并行运行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
,没有去。
有什么想法吗?
答案 0 :(得分:0)
我怀疑发生了什么:
>
重定向到服务器上的管理员共享。使用-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
}