PowerShell Stop-Job
最后修改:2025 年 2 月 15 日
在本文中,我们将介绍 PowerShell 中的 Stop-Job
cmdlet。此 cmdlet 用于停止 PowerShell 中正在运行的后台作业。它对于管理长时间运行的任务非常有用。
作业基础
PowerShell 中的作业是独立运行的后台任务。作业允许您在不阻塞控制台的情况下运行命令。每个作业都有唯一的 ID 和状态(正在运行、已完成、失败)。Stop-Job
cmdlet 用于终止正在运行的作业。
Stop-Job 的基本用法
使用 Stop-Job
的最简单方法是配合作业对象。首先,使用 Start-Job
启动一个作业。然后将作业传递给 Stop-Job
。这将立即终止后台任务。
$job = Start-Job -ScriptBlock { Start-Sleep -Seconds 60 } Stop-Job -Job $job
此脚本启动一个将睡眠 60 秒的后台作业。Stop-Job
cmdlet 在其完成之前停止它。作业状态变为已停止。
按 ID 停止作业
可以使用作业的唯一 ID 号来停止作业。首先,使用 Get-Job
列出作业以查找 ID。然后将 ID 传递给 Stop-Job
。这在管理多个作业时很有用。
Start-Job -ScriptBlock { Start-Sleep -Seconds 30 } Get-Job Stop-Job -Id 1
这会启动一个睡眠作业,列出所有作业,然后停止 ID 为 1 的作业。作业 ID 显示在 Get-Job
的输出中。ID 按顺序分配。
停止多个作业
可以使用管道输入一次停止多个作业。首先使用 Get-Job
过滤作业,然后将其通过管道传递给 Stop-Job
。这对于批量作业管理非常有效。
Start-Job -ScriptBlock { Start-Sleep -Seconds 20 } Start-Job -ScriptBlock { Start-Sleep -Seconds 30 } Get-Job -State Running | Stop-Job
这会启动两个睡眠作业,然后停止所有正在运行的作业。管道将每个正在运行的作业传递给 Stop-Job
。两个作业都会被终止。
按名称停止作业
创建作业时可以为其命名,并按名称停止。在 Start-Job
和 Stop-Job
中都使用 -Name
参数。在复杂的脚本中,命名作业更容易管理。
Start-Job -Name "MyJob" -ScriptBlock { Start-Sleep -Seconds 40 } Stop-Job -Name "MyJob"
这会创建一个名为“MyJob”的作业,该作业将睡眠 40 秒。Stop-Job
cmdlet 按名称停止它。命名作业更容易跟踪。
强制停止卡死的作业
有些作业可能不响应正常的停止请求。-Force
参数可以终止顽固的作业。对于无响应的作业,应将其作为最后手段使用。
$job = Start-Job -ScriptBlock { while($true) { } } Stop-Job -Job $job -Force
这会启动一个无限循环作业。-Force
参数确保终止。强制停止可能会导致资源处于不一致状态。
停止远程作业
远程计算机上运行的作业也可以被停止。首先使用 Invoke-Command
创建一个远程作业。然后使用作业对象或 ID 停止它。
$session = New-PSSession -ComputerName Server01 $job = Invoke-Command -Session $session -ScriptBlock { Start-Sleep -Seconds 50 } -AsJob Stop-Job -Job $job
这会创建一个远程会话并启动一个睡眠作业。Stop-Job
cmdlet 终止远程作业。远程作业管理需要适当的权限。
停止前确认
-Confirm
参数会在停止每个作业前进行提示。这可以防止意外终止作业。在生产环境中很有用。
Start-Job -ScriptBlock { Start-Sleep -Seconds 10 } Stop-Job -Id 1 -Confirm
这会启动一个睡眠作业,然后在停止它之前进行提示。确认信息会显示作业的详细信息。输入“Y”继续或“N”取消。
停止所有作业
可以使用 Get-Job
和 Stop-Job
一次停止所有作业。这是清理所有后台任务的快捷方式。请注意,它会停止所有作业。
Start-Job -ScriptBlock { Start-Sleep -Seconds 15 } Start-Job -ScriptBlock { Start-Sleep -Seconds 25 } Get-Job | Stop-Job
这会启动两个睡眠作业,然后停止所有作业。管道将所有作业传递给 Stop-Job
。所有后台任务都被终止。
来源
在本文中,我们介绍了 PowerShell 中的 Stop-Job cmdlet。
作者
列出 所有 PowerShell 教程。