Powershell: uzyskaj dane wyjściowe z Receive-Job
Mam kolekcję prac, które są uruchomione. Po ich zakończeniu używam zadania odbioru i zapisuje dane wyjściowe na ekranie. Chciałbym wziąć ten wynik i zalogować go do pliku. Nie chcę generować danych wyjściowych, gdy zadania są uruchomione, ponieważ wiele zadań jest uruchomionych jednocześnie, a rejestrowanie zostanie przeplatane. Get-Job | Receive-Job drukuje dane wyjściowe w uporządkowany sposób.
Wypróbowałem wszystkie poniższe elementy i żadne dane nie są zapisywane w pliku lub przechowywane w zmiennej, po prostu trafiają na ekran:
#Wait for last job to complete
While (Get-Job -State "Running") {
Log "Running..." -v $info
Start-Sleep 10
}
Log ("Jobs Completed. Output:") -v $info
# Getting the information back from the jobs
foreach($job in Get-Job){
Receive-Job -Job $job | Out-File c:\Test.log -Append
$output = Receive-Job -Job $job
Log ("OUTPUT: "+$output)
Receive-Job -Job $job -OutVariable $foo
Log ("FOO: "+$foo)
}
EDYCJA: Usunąłem dodatkowe wezwania do otrzymania pracy w foreach do następujących po obejrzeniu komentarza Keitha:
# Getting the information back from the jobs
foreach($job in Get-Job){
Receive-Job -Job $job -OutVariable temp
Write-Host ("Temp: "+$temp)
$temp | Out-File -FilePath c:\Test.log -Append
}
Sprawdziłem również, że nie używam Receive-Job nigdzie indziej w skrypcie. Zapisujący host $ temp i plik wyjściowy nadal nie generują żadnego wyjścia.