Stop-Job
停止 PowerShell 后台作业。
语法
Stop-Job
[-PassThru]
[-Id] <Int32[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Stop-Job
[-Job] <Job[]>
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Stop-Job
[-PassThru]
[-Name] <String[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Stop-Job
[-PassThru]
[-InstanceId] <Guid[]>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Stop-Job
[-PassThru]
[-State] <JobState>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Stop-Job
[-PassThru]
[-Filter] <Hashtable>
[-WhatIf]
[-Confirm]
[<CommonParameters>]
说明
该 Stop-Job
cmdlet 停止正在进行的 PowerShell 后台作业。 可以使用此 cmdlet 根据作业的名称、ID、实例 ID 或状态停止所有作业或停止所选作业,或者通过将作业对象传递给 来 Stop-Job
停止这些作业。
可以使用 Stop-Job
停止后台作业,例如使用 Start-Job
任何 cmdlet 的 cmdlet 或 AsJob 参数启动的作业。 停止后台作业时,PowerShell 将完成该作业队列中挂起的所有任务,然后结束该作业。 提交此命令后,将不会有新任务添加到队列。
此 cmdlet 不删除后台作业。 若要删除作业,请使用 Remove-Job
cmdlet。
从 Windows PowerShell 3.0 开始,Stop-Job
还会停止自定义作业类型,例如工作流作业和计划作业实例。 若要启用 Stop-Job
停止具有自定义作业类型的作业,请在运行 Stop-Job
命令之前,通过使用 Import-Module
cmdlet 或使用或获取模块中的 cmdlet,将支持自定义作业类型的模块导入会话。 有关特定的自定义作业类型的信息,请参阅自定义作业类型功能的文档。
示例
示例 1:使用 Invoke-Command 停止远程计算机上的作业
$s = New-PSSession -ComputerName Server01 -Credential Domain01\Admin02
$j = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-EventLog System}}
Invoke-Command -Session $s -ScriptBlock { Stop-job -Job $Using:j }
此示例演示如何使用 Stop-Job
cmdlet 停止远程计算机上运行的作业。
由于作业是使用 Invoke-Command
cmdlet 远程运行 Start-Job
命令启动的,因此作业对象存储在远程计算机上。 必须使用另一个 Invoke-Command
命令远程运行 Stop-Job
命令。 有关远程后台作业的详细信息,请参阅 about_Remote_Jobs。
第一个命令在 Server01 计算机上 (PSSession) 创建 PowerShell 会话,然后将会话对象存储在 变量中 $s
。 该命令使用某个域管理员的凭据。
第二个Start-Job
命令使用 Invoke-Command
cmdlet 在会话中运行命令。 作业中的此命令将获取系统事件日志中的所有事件。 生成的作业对象存储在 变量中 $j
。
第三个命令停止作业。 它使用 Invoke-Command
cmdlet 在 Server01 上的 PSSession 中运行Stop-Job
命令。 由于作业对象存储在 中 $j
,该变量是本地计算机上的变量,因此命令使用 Using scope 修饰符标识 $j
为局部变量。
有关使用范围修饰符的详细信息,请参阅 about_Remote_Variables。
命令完成后,作业将停止,并且 中的 $s
PSSession 可供使用。
示例 2:停止后台作业
Stop-Job -Name "Job1"
此命令停止 Job1 后台作业。
示例 3:停止多个后台作业
Stop-Job -Id 1, 3, 4
此命令停止三个作业。 它将通过 ID 来标识作业。
示例 4:停止所有后台作业
Get-Job | Stop-Job
此命令停止当前会话中的所有后台作业。
示例 5:停止所有阻止的后台作业
Stop-Job -State Blocked
此命令停止阻止的所有作业。
示例 6:使用实例 ID 停止作业
Get-Job | Format-Table ID, Name, Command, @{Label="State";Expression={$_.JobStateInfo.State}},
InstanceID -Auto
Id Name Command State InstanceId
-- ---- ------- ----- ----------
1 Job1 start-service schedule Running 05abb67a-2932-4bd5-b331-c0254b8d9146
3 Job3 start-service schedule Running c03cbd45-19f3-4558-ba94-ebe41b68ad03
5 Job5 get-service s* Blocked e3bbfed1-9c53-401a-a2c3-a8db34336adf
Stop-Job -InstanceId e3bbfed1-9c53-401a-a2c3-a8db34336adf
这些命令显示了如何根据作业的实例 ID 来停止作业。
第一个命令使用 Get-Job
cmdlet 获取当前会话中的作业。 该命令使用管道运算符 (|
) 将作业 Format-Table
发送到命令,该命令显示每个作业的指定属性的表。 该表包括每个作业的实例 ID。 它使用计算属性来显示作业状态。
第二个 Stop-Job
命令使用具有 InstanceID 参数的命令来停止所选作业。
示例 7:停止远程计算机上的作业
$j = Invoke-Command -ComputerName Server01 -ScriptBlock {Get-EventLog System} -AsJob
$j | Stop-Job -PassThru
Id Name State HasMoreData Location Command
-- ---- ---- ----------- -------- -------
5 Job5 Stopped True user01-tablet get-eventlog system
此示例演示如何使用 Stop-Job
cmdlet 停止远程计算机上运行的作业。
由于作业是使用 cmdlet 的 AsJob 参数启动的 Invoke-Command
,因此作业对象位于本地计算机上,即使作业在远程计算机上运行也是如此。 因此,可以使用本地 Stop-Job
命令来停止作业。
第一个命令使用 Invoke-Command
cmdlet 在 Server01 计算机上启动后台作业。 该命令使用 AsJob 参数将远程命令作为后台作业运行。
此命令返回一个作业对象,该对象与 cmdlet 返回的 Start-Job
作业对象相同。
命令将作业对象保存在 变量中 $j
。
第二个命令使用管道运算符将变量中的 $j
作业发送到 Stop-Job
。 命令使用 PassThru 参数直接 Stop-Job
返回作业对象。 作业对象显示确认作业的状态为“已停止”。
有关远程后台作业的详细信息,请参阅 about_Remote_Jobs。
参数
-Confirm
提示你在运行 cmdlet 之前进行确认。
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Filter
指定条件的哈希表。 此 cmdlet 停止满足所有条件的作业。 输入一个哈希表,其中的键为作业属性,其中的值为作业属性值。
此参数仅适用于自定义作业类型,例如工作流作业和计划作业。 它不适用于标准后台作业,例如使用 Start-Job
cmdlet 创建的作业。 有关支持此参数的信息,请参阅作业类型的帮助主题。
已在 Windows PowerShell 3.0 中引入了此参数。
Type: | Hashtable |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Id
指定此 cmdlet 停止的作业的 ID。 默认值为当前会话中的所有作业。
ID 是一个整数,用于唯一标识当前会话中的作业。 它比实例 ID 更容易记住和键入,但它仅在当前会话中是唯一的。 可以键入一个或多个 ID,用逗号分隔。 若要查找作业的 ID,请键入 Get-Job
。
Type: | Int32[] |
Position: | 0 |
Default value: | All jobs |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-InstanceId
指定此 cmdlet 停止的作业的实例 ID。 默认值为所有作业。
实例 ID 是一个 GUID,用于在计算机上唯一标识作业。 若要查找作业的实例 ID,请使用 Get-Job
。
Type: | Guid[] |
Position: | 0 |
Default value: | All jobs |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Job
指定此 cmdlet 停止的作业。 请输入一个包含作业的变量,或一个可获取作业的命令。 还可以使用管道运算符将作业提交到 Stop-Job
cmdlet。 默认情况下, Stop-Job
删除在当前会话中启动的所有作业。
Type: | Job[] |
Position: | 0 |
Default value: | All jobs |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Name
指定此 cmdlet 停止的作业的友好名称。 以逗号分隔的列表形式输入作业名称,或使用通配符 (*) 来输入作业名称模式。 默认情况下, Stop-Job
停止在当前会话中创建的所有作业。
由于不保证友好名称是唯一的,因此在按名称停止作业时,请使用 WhatIf 和 Confirm 参数。
Type: | String[] |
Position: | 0 |
Default value: | All jobs |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-PassThru
返回一个代表你所处理的项目的对象。 默认情况下,此 cmdlet 将不产生任何输出。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-State
指定作业状态。 此 cmdlet 仅停止处于指定状态的作业。 此参数的可接受值为:
- NotStarted
- 正在运行
- 已完成
- 已失败
- 已停止
- 已阻止
- Suspended
- 已断开连接
- 正在暂停
- 正在停止
有关作业状态的详细信息,请参阅 JobState 枚举。
Type: | JobState |
Accepted values: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Position: | 0 |
Default value: | All jobs |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-WhatIf
显示运行该 cmdlet 时会发生什么情况。 此 cmdlet 未运行。
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
输入
System.Management.Automation.RemotingJob
可以通过管道将作业对象传递给此 cmdlet。
输出
None, System.Management.Automation.PSRemotingJob
如果指定 PassThru 参数,则此 cmdlet 将返回作业对象。 否则,此 cmdlet 将不生成任何输出。