其他一些方法,$args 和 $input。这也适用于调用命令,我认为它使用相同的机制。$input 方法以一种意想不到的方式处理数组。
start-job { $args[0] } -args hi | receive-job -wait -auto
hi
echo hi | start-job { $input } | receive-job -wait -auto
hi
echo hi there | start-job { $input.gettype() } | receive-job -wait -auto
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
False False <GetReadEnumerator>d__20 System.Object
对于数组,使用 foreach-object (%) 循环可能会更好,因此它在每个数组项上并行运行。另请参阅 powershell 7 中的 start-threadjob 或 foreach-object -parallel。实际上没有 -throttlelimit 选项可用于启动作业,因此请谨慎使用。
echo yahoo.com facebook.com |
% { $_ | start-job { test-netconnection $input } } |
receive-job -wait -auto | select * -exclude runspaceid,pssourcejob* | ft
ComputerName RemoteAddress ResolvedAddresses PingSucce
eded
------------ ------------- ----------------- ---------
yahoo.com 74.6.143.25 {74.6.143.25,...} True
facebook.com 31.13.71.36 {31.13.71.36} True