这些天有这么多答案:
- 作业(或PS 6/7或模块中的threadjob)
- 开始过程
- 工作流程
- Powershell API与另一个运行空间
- 具有多台计算机的invoke-command都可以是localhost(必须是admin)
- ISE中的多个会话(运行空间)选项卡,或远程Powershell ISE选项卡
- Powershell 7可以
foreach-object -parallel
替代#4
以下是字面量为foreach -parallel的工作流程:
workflow work {
foreach -parallel ($i in 1..3) {
sleep 5
"$i done"
}
}
work
3 done
1 done
2 done
或带有并行块的工作流程:
function sleepfor($time) { sleep $time; "sleepfor $time done"}
workflow work {
parallel {
sleepfor 3
sleepfor 2
sleepfor 1
}
'hi'
}
work
sleepfor 1 done
sleepfor 2 done
sleepfor 3 done
hi
这是带有运行空间示例的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,$r2,$r3 = ($a,$b,$c).begininvoke() # run in background
$a.EndInvoke($r1); $b.EndInvoke($r2); $c.EndInvoke($r3) # wait
($a,$b,$c).streams.error # check for errors
($a,$b,$c).dispose() # clean
a done
b done
c done
receive-job (wait-job ($a = start-job { "heyo!" })); remove-job $a
或$a = start-job { "heyo!" }; wait-job $a; receive-job $a; remove-job $a
也请注意,如果您receive-job
在作业完成之前致电,您可能一无所获。