Invoke-Command
已经对每台计算机并行执行调用,作为内置功能的一部分 https://technet.microsoft.com/en-us/library/gg981683.aspx:
一对多远程处理
远程处理的真正威力在于能够并行向一台或多台远程计算机发送命令。每台远程计算机执行该命令,将结果对象序列化为 XML 并通过网络将结果传输到您的计算机。
您的计算机接收 XML 并将其反序列化回静态对象。这使您能够以与任何其他命令输出几乎相同的方式处理命令输出。
这一切都从 Invoke-Command cmdlet 开始。在最简单的形式中,您只需以脚本块的形式指定要运行的命令以及运行该命令的一台或多台计算机。例如,要从文本文件中读取计算机名称列表(每行一个名称)并对每个计算机名称运行命令,请使用:
Invoke-Command –scriptblock { Get-EventLog Security –newest 200 } –computername (Get-Content computernames.txt)
当结果到达您的计算机时,它们将附加一个名为 PSComputerName 的附加属性。这可以让您看到哪个结果来自哪台计算机。这很有帮助,因为它们可能不会全部以相同的顺序接收。
The -ComputerName
参数可以采用列表/数组,并且它将并行地对它们执行远程命令(而不是一次执行一个)。您还可以使用-Session
如果要对正在进行的会话执行多个命令,请使用该参数。
注意:请记住,默认情况下,一次并发连接数限制为 32 个。这可以通过修改-ThrottleLimit
范围。
执行local对于远程系统的功能,你必须使用一个小技巧:
# Let's say the function is called 'Do-Thing'
$Computers = 'node1','node2'
Invoke-Command -ComputerName $Computers -ScriptBlock ${function:Do-Thing} -ArgumentList 'arg1'
不过,简单地将函数/脚本保存到要执行的文件中可能会更容易:
Invoke-Command -ComputerName $Computers -FilePath .\script.ps1
进一步跟进:
Update-Help
help Invoke-Command -Full
help about_Remote
如果需要,请查看以下链接:
- 远程函数演练示例:在 PowerShell 中远程运行本地函数 http://duffney.io/RunLocalFunctionsRemotely
-
PowerShell 远程处理的秘密 https://leanpub.com/secretsofpowershellremoting(LeanPub 电子书,可以选择免费下载)
-
(在线文档)
-
调用命令 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/invoke-command?view=powershell-6(在线文档)
- StackOverflow 可能重复:使用 PowerShell 的 Invoke-Command 进行远程处理时,如何包含本地定义的函数? https://stackoverflow.com/questions/11367367/how-do-i-include-a-locally-defined-function-when-using-powershells-invoke-comma