I am using remoting to execute a scriptblock on a group of servers, and using the ‘-asjob’ parameter to run it in the background. For example:
1> Â $job = Invoke-Command -ComputerName $ComputerName -scriptblock $ScriptBlock -jobname $JobName -throttlelimit $ThrottleLimit -AsJob
Once the job has completed, I write the results and the errors into variables, eg,
2> Â $jobresult = Get-Job -Name $jobName |Â Wait-Job | Receive-Job -ErrorVariable $ErrorVariableName -ErrorAction SilentlyContinue
This works fine, Â but I have to wait around for the job to finish in order to issue the above command, when it would be much better for another wrapper job to run that waits for the childjobs to complete, then writes the results into the variable $jobresult. For example, replace (2) with something like:
3> Â Start-Job -Name JobExec -ScriptBlock { $jobresult = $job | Wait-Job | Receive-Job -ErrorVariable $errorVariableName -ErrorAction SilentlyContinue}
If I issue 1 & 3 above, everything executes, but there’s no data written into $jobresult ( at least not that I can get out) or $errorVariableName . Is there something I’m missing with variable scoping here? Something else I’m missing altogether? I’ve tried forcing $jobresult to have global scope, with no luck. Please advise!
I want to be able to run 1 and 3 together in the background, and when they are done, both $jobresult and $errorVariable will be populated with data, and in the meantime I’m free to use the console, without having to wait to issue the receive-job