Parallel processing with PowerShell Jobs

For those familiar with Unix or Linux, the concept of parallel processing using jobs isn’t foreign. PowerShell brings forth the ability to execute commands in the background, freeing up the console for other tasks. I explored cmdlets like “Start-Job,” which enable launching multiple jobs simultaneously, thus sidestepping the delay of sequential execution. Of course, I had to tread carefully, considering the resources my machine could handle. Running a barrage of background commands could strain the system’s resources.

The magic happens when executing WMI queries as jobs using the “-AsJob” parameter or the “Start-Job” cmdlet:

Get-WMIObject Win32_OperatingSystem -AsJob

Start-Job { Get-WMIObject Win32_OperatingSystem }

The status of a job is unveiled through the “State” column when employing the “Get-Job” command. It eloquently signals whether a job is “Running,” “Completed,” or “Failed.” The “HasMoreData” column provides insight into pending output retrieval. After igniting a job, fetching the output requires a nifty trick using “Receive-Job.” However, remember that you can access the data output just once.


Receive-Job -Id 3

To savor the output and evaluate it, you can store it in a variable. And when you’re done relishing the results, usher the job out gracefully with the “Remove-Job” command.

$JobOutput = Receive-Job -Id 1

Remove-Job -Id 1

Leave a comment

Your email address will not be published. Required fields are marked *

1 × four =