PowerShell Stop-Job tutorial shows how to use PowerShell to stop background jobs.
last modified February 15, 2025
In this article, we will cover the Stop-Job cmdlet in PowerShell. This cmdlet stops background jobs running in PowerShell. It is useful for managing long-running tasks.
A job in PowerShell is a background task that runs independently. Jobs allow you to run commands without blocking the console. Each job has a unique ID and state (Running, Completed, Failed). The Stop-Job cmdlet terminates running jobs.
The simplest way to use Stop-Job is with a job object. First, start a job with Start-Job. Then pass the job to Stop-Job. This immediately terminates the background task.
stopjob1.ps1
$job = Start-Job -ScriptBlock { Start-Sleep -Seconds 60 } Stop-Job -Job $job
This script starts a background job that sleeps for 60 seconds. The Stop-Job cmdlet stops it before completion. The job state changes to Stopped.
Jobs can be stopped using their unique ID numbers. First, list jobs with Get-Job to find the ID. Then pass the ID to Stop-Job. This is useful when managing multiple jobs.
stopjob2.ps1
Start-Job -ScriptBlock { Start-Sleep -Seconds 30 } Get-Job Stop-Job -Id 1
This starts a sleep job, lists all jobs, then stops job ID 1. The job ID is shown in the Get-Job output. IDs are assigned sequentially.
Multiple jobs can be stopped at once using pipeline input. First filter jobs with Get-Job, then pipe to Stop-Job. This is efficient for bulk job management.
stopjob3.ps1
Start-Job -ScriptBlock { Start-Sleep -Seconds 20 } Start-Job -ScriptBlock { Start-Sleep -Seconds 30 } Get-Job -State Running | Stop-Job
This starts two sleep jobs, then stops all running jobs. The pipeline passes each running job to Stop-Job. Both jobs are terminated.
Jobs can be named when created and stopped by name. Use the -Name parameter with both Start-Job and Stop-Job. Named jobs are easier to manage in complex scripts.
stopjob4.ps1
Start-Job -Name “MyJob” -ScriptBlock { Start-Sleep -Seconds 40 } Stop-Job -Name “MyJob”
This creates a named job “MyJob” that sleeps for 40 seconds. The Stop-Job cmdlet stops it by name. Named jobs are easier to track.
Some jobs may not respond to normal stop requests. The -Force parameter can terminate stubborn jobs. This should be used as a last resort for unresponsive jobs.
stopjob5.ps1
$job = Start-Job -ScriptBlock { while($true) { } } Stop-Job -Job $job -Force
This starts an infinite loop job. The -Force parameter ensures termination. Forced stops may leave resources in an inconsistent state.
Jobs running on remote computers can be stopped too. First create a remote job with Invoke-Command. Then stop it using the job object or ID.
stopjob6.ps1
$session = New-PSSession -ComputerName Server01 $job = Invoke-Command -Session $session -ScriptBlock { Start-Sleep -Seconds 50 } -AsJob Stop-Job -Job $job
This creates a remote session and starts a sleep job. The Stop-Job cmdlet terminates the remote job. Remote job management requires proper permissions.
The -Confirm parameter prompts before stopping each job. This prevents accidental job termination. It’s useful in production environments.
stopjob7.ps1
Start-Job -ScriptBlock { Start-Sleep -Seconds 10 } Stop-Job -Id 1 -Confirm
This starts a sleep job, then prompts before stopping it. The confirmation shows the job details. Answer ‘Y’ to proceed or ‘N’ to cancel.
All jobs can be stopped at once using Get-Job with Stop-Job. This is a quick way to clean up all background tasks. Be careful as it stops every job.
stopjob8.ps1
Start-Job -ScriptBlock { Start-Sleep -Seconds 15 } Start-Job -ScriptBlock { Start-Sleep -Seconds 25 } Get-Job | Stop-Job
This starts two sleep jobs, then stops all jobs. The pipeline passes every job to Stop-Job. All background tasks are terminated.
In this article, we have covered the Stop-Job cmdlet in PowerShell.
My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.
List all PowerShell tutorials.