带运行空间的多线程,而不是foreach周期

时间:2019-07-08 13:46:31

标签: powershell foreach parallel-processing

我有一个带有foreach循环的脚本。它具有大约十二个功能,每个功能都从远程计算机的C $共享中收集信息(剪切文本文件,检查文件版本等)

但是,这需要一些时间,因为每台机器的数据都是一个接一个地收集的。 (有时会运行500多个输入)

希望通过并行执行将其放到运行空间中,但到目前为止,尚无示例可用。我对这个概念很陌生。

当前脚本的大纲 $ inputfile = c:\ temp \ computerlist.txt

功能1 功能2 功能3,等等

foreach周期  功能1  功能2  功能3

目前所有结果都已通过write-host写入屏幕。

2 个答案:

答案 0 :(得分:0)

此示例并行ping多个服务器,因此您可以轻松地根据需要对其进行修改:

Range

答案 1 :(得分:0)

这将是并发的,总共需要10秒钟。如果您的计算机可以工作,则它可能是本地主机的三倍。

invoke-command comp1,comp2,comp3 { sleep 10; 'done' } 

简单尝试api(线程)

$a =  [PowerShell]::Create().AddScript{sleep 5;'a done'}
$b =  [PowerShell]::Create().AddScript{sleep 5;'b done'}
$c =  [PowerShell]::Create().AddScript{sleep 5;'c done'}
$r1 = $a.BeginInvoke(); $r2 = $b.BeginInvoke() $r3 = $c.BeginInvoke()
$a.EndInvoke($r1); $b.EndInvoke($r2); $c.EndInvoke($r3)

a done
b done
c done