时不时地,我需要在多个 Windows 服务器上运行一个命令(从包含脚本文件 [和其他随机内容] 的源代码存储库中同步文件)。该命令的执行时间由网络延迟决定。
目前,我使用 PowerShell 的 Invoke-Command cmdlet,但它在每个主机上按顺序运行命令。由于这个脚本需要很长时间才能运行(有时每台服务器需要几分钟),我想通过一次在所有服务器上并行运行命令来加快速度。
据我所知,Invoke-Command 无法做到这一点。SysInternals 的 psexec 也不能这样做。
我隐约知道 PowerShell 有一个并行循环工具,可以在多个线程上同时执行多次循环迭代。但是文档指出这仅在我不熟悉的 PowerShell 工作流程中可用,这听起来有点矫枉过正。
在 Unix-y shell 中,我可以在后台运行 psexec 的每次调用。但据我所知,PowerShell 不支持这一点。或者我可以使用像 GNU parallel 或 ts 这样的工具。
在 Windows 7 机器上有(简单的)方法可以做到这一点吗?
如果所有其他方法都失败了,我可以编写 Perl 脚本之类的东西,但为什么要重新发明轮子呢?我当然不是第一个遇到这个问题的人。