2016-09-12 2 views
0

여러 사이트를 핑 (ping)하는 스크립트를 작성한 다음 결과를 표시하기 위해 파일을 엽니 다. 결과가 끝나면 열어보고 싶습니다. 대신 파일을 열기 전에 모든 작업이 완료 될 때까지 대기합니다. 또한 일부 파일 만 열리는 문제도있었습니다. 어떤 도움도 감사 할 것입니다.Powershell Multijob 스크립트. 모든 작업이 완료 될 때까지 기다리지 않고 작업이 완료되면 파일을 엽니 다.

$count = 500 

$sites = "www.google.com","8.8.8.8","127.0.0.1" 

foreach ($site in $sites) 
{ 
    Remove-Item "C:\WFSupport\Self Service Tool\$site.txt" 
    start-job -Name $site -ScriptBlock { param ($count,$site) ping -n $count $site } -ArgumentList $count, $site 

} 
While ((Get-Job).State -match 'Running') 
{ 
foreach ($Job in Get-Job | where {$_.HasMoreData}) 
{ 
$Jobname = $Job.Name 
Receive-Job $Job | Out-File -Encoding ascii -Append "C:\WFSupport\Self Service Tool\$Jobname.txt" 
} 
Start-Sleep -Seconds 10 
} 
While ((Get-Job).State -match 'Completed') 
{ 
foreach ($Job in Get-Job | where {$_.HasMoreData}) 
{ 
$Jobname = $Job.Name 
Receive-Job $Job | Out-File -Encoding ascii -Append "C:\WFSupport\Self Service Tool\$Jobname.txt" 
Invoke-Item "C:\WFSupport\Self Service Tool\$Jobname.txt" 
} 
Get-Job | Remove-Job 
} 

답변

0

이것은 '실행 중'루프 검사가 모든 작업이 중지 될 때까지 중지되지 않기 때문입니다. 아래 코드는 루프가 끝날 때까지 실행되지 않습니다.

while ((Get-Job).State -match 'Running') { 
    foreach ($job in Get-Job | where {$_.HasMoreData}) { 
     $jobname = $job.name 
     Receive-Job $Job | Out-File -Encoding ascii -Append "C:\WFSupport\Self Service Tool\$Jobname.txt" 
     if ($job.State -like 'Completed'){ 
      Invoke-Item "C:\WFSupport\Self Service Tool\$Jobname.txt" 
      $job | remove-job 
     } 
    } 
    start-sleep -seconds 10 
} 
+0

실감하지 못했습니다. 감사! – Gizmo44667

관련 문제