我想为每个通过范围选择的端口多次运行1个脚本,并传递需要用于连接的端口详细信息,我试图使用以下脚本:
$availableports = 7000..7050
while ($availableports -notcontains $SPort) {
[string]$SPort= Read-Host -Prompt 'S Ports'
}
while ($availableports -notcontains $FPort) {
[string]$FPort= Read-Host -Prompt 'F Ports'
}
$massport = ($SPort)..($FPort)
foreach ($Port in $massport) {
C:\PShell-Projects\Firmware\SCP-FMUPv2.ps1 -Port "$Port"
}
这有效,但是在引用的脚本完成之前不会继续到下一个端口。
我想同时运行它们。
我尝试了
$arg = @("-Port", $portm)
Start-Job -FilePath C:\PShell-Projects\Firmware\SCP-FMUPv2.ps1 -ArgumentList $arg
但是该作业被阻塞,当我使用Receive-Job
时,它要求端口打开一个连接,该连接应该作为循环的一部分发送。
我似乎缺少一些关键信息,但是不知道从哪里开始以及在查找这些信息时似乎并没有脱颖而出。
答案 0 :(得分:1)
这对我有用:
$jobs = @()
foreach ($Port in $massport) {
$jobs += start-job -FilePath "job.ps1" -ArgumentList @($port)
}
Receive-Job $jobs -Wait
(ArgumentList中没有命名的参数)。
您还可以查看Invoke-Parallel函数,该函数简化了并行任务的运行。
答案 1 :(得分:0)
您可能可以在C:\PShell-Projects\Firmware\SCP-FMUPv2.ps1 -Port "$Port
命令之后使用-asjob使其同时执行。
如果ps1不能使用-asjob,则可以用invoke-command {}
包裹它