Zon*_*Out 3 powershell multithreading
我正在编写一个脚本,它有几个函数需要时间在不同的远程计算机上执行。有什么办法可以同时以并行方式调用-命令它们吗?一个例子将不胜感激。谢谢
Invoke-Command
作为内置功能的一部分,已经对每台计算机并行执行调用:
一对多远程处理
远程处理的真正威力是能够并行地向一台或多台远程计算机发送命令。每台远程计算机执行命令,将结果对象序列化为 XML,并通过网络将结果传输到您的计算机。
您的计算机接收 XML 并将其反序列化为静态对象。这使您可以以与任何其他命令输出几乎相同的方式处理命令输出。
这一切都始于 Invoke-Command cmdlet。以最简单的形式,您只需以脚本块的形式指定要运行的命令,以及运行该命令的一台或多台计算机。例如,要从文本文件中读取计算机名称列表(每行一个名称)并对每个名称运行命令,请使用:
Invoke-Command –scriptblock { Get-EventLog Security –newest 200 } –computername (Get-Content computernames.txt)
当结果进入您的计算机时,它们将附加一个名为 PSComputerName 的附加属性。这让您可以看到哪个结果来自哪台计算机。这很有用,因为它们可能不会以相同的顺序接收。
该-ComputerName
参数可以采用一个列表/数组,它将并行地对它们执行远程命令(而不是一次执行一个)。-Session
如果要针对正在进行的会话执行多个命令,您也可以使用该参数。
注意:请记住,默认情况下,一次限制为 32 个并发连接。这可以通过
-ThrottleLimit
参数修改。
要对远程系统执行本地函数,您必须使用一个小技巧:
# Let's say the function is called 'Do-Thing'
$Computers = 'node1','node2'
Invoke-Command -ComputerName $Computers -ScriptBlock ${function:Do-Thing} -ArgumentList 'arg1'
Run Code Online (Sandbox Code Playgroud)
不过,将函数/脚本简单地保存到要执行的文件中可能会更容易:
Invoke-Command -ComputerName $Computers -FilePath .\script.ps1
Run Code Online (Sandbox Code Playgroud)
进一步跟进:
Update-Help
help Invoke-Command -Full
help about_Remote
Run Code Online (Sandbox Code Playgroud)
如果需要,请查看以下链接:
归档时间: |
|
查看次数: |
5461 次 |
最近记录: |