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

Powershell-同时在多台服务器上运行PsExec,powershell,psexec,Powershell,Psexec,如何在多台服务器上并行运行,并将结果输出到文本文件?比如: ForEach ($s in $Srvs) { Psexec -s -d \\$s someexe.exe > \\$s\c$\temp\$s.txt } 这在没有-d选项的情况下可以工作,但只要添加-d,输出就为空 我在PS工作流中尝试了调用命令、启动流程等,但管道选项“”不起作用。我也试过2>和2>$&1,不可以 有什么想法吗?我怀疑发生的是: PsExec在您的计算机上运行 它创建与服务器的连接并启动someex

如何在多台服务器上并行运行,并将结果输出到文本文件?比如:

ForEach ($s in $Srvs) {
    Psexec -s -d \\$s someexe.exe > \\$s\c$\temp\$s.txt
}
这在没有
-d
选项的情况下可以工作,但只要添加
-d
,输出就为空

我在PS工作流中尝试了
调用命令、启动流程
等,但管道选项“
”不起作用。我也试过
2>
2>$&1
,不可以


有什么想法吗?

我怀疑发生的是:

  • 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
}

@同样的事情也发生在我身上;我用编辑和其他建议更新了我的答案。我同意它会起作用,但它违背了我创建一个独立工具的目的。然后,我将不得不使脚本在所有服务器上可用的第一@Rishi
-c
选项告诉psexec在运行脚本之前将脚本复制到远程计算机,如果脚本已经存在,则告诉psexec将其覆盖。