~2 min read • Updated Dec 21, 2025
1. Remoting-Based Jobs
Two primary ways to start jobs:
- Start-Job: Runs locally in the background.
- Invoke-Command -AsJob: Executes commands on remote computers, tracked locally.
Jobs consist of a parent and child jobs. Use Get-Job to check status, Receive-Job to retrieve results, Wait-Job to pause until completion, and Stop-Job to terminate jobs.
2. Managing Job Results
- Results are cached temporarily;
-Keeppreserves them for multiple retrievals. - Jobs expose streams: Error, Progress, Verbose, Debug, and Warning.
- Failed jobs can be investigated via
JobStateInfoandReasonproperties.
3. WMI Jobs
WMI cmdlets such as Get-WmiObject support -AsJob, enabling parallel execution across multiple computers. These jobs communicate via RPC, not Remoting. Use -ThrottleLimit to control concurrency.
4. Scheduled Jobs
Introduced in PowerShell v3, scheduled jobs persist beyond the console session and integrate with Windows Task Scheduler.
- Register-ScheduledJob: Creates jobs with triggers and options.
- New-JobTrigger: Defines when jobs run (e.g., daily at 3 a.m.).
- New-ScheduledJobOption: Configures behavior (e.g., require network).
Results are stored on disk in \AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs. Use Receive-Job to retrieve outputs and Remove-Job to clear history.
5. Job Processes
- Start-Job: Creates child PowerShell.exe processes.
- Invoke-Command -AsJob: Runs under
wsmprovhost.exevia WSMAN. - WMI Jobs: Execute through RPC with child jobs per computer.
Conclusion
PowerShell Jobs provide robust asynchronous execution, remote management, and scheduling capabilities. By mastering job creation, monitoring, and troubleshooting, administrators can automate complex tasks efficiently across local and remote environments.
Written & researched by Dr. Shahin Siami