Stop-Job
停止 Windows PowerShell 后台作业。
语法
Stop-Job [[-InstanceId] <Guid[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]
Stop-Job [-Job] <Job[]> [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]
Stop-Job [[-Name] <string[]>] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]
Stop-Job [-Id] <Int32[]> [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]
Stop-Job [-State {<NotStarted> | <Running> | <Completed> | <Failed> | <Stopped> | <Blocked>}] [-PassThru] [-Confirm] [-WhatIf] [<CommonParameters>]
说明
Stop-Job cmdlet 停止正在进行的 Windows PowerShell 后台作业。可以使用此 cmdlet 停止所有作业,或者基于作业的名称、ID、实例 ID 或状态,或通过将作业对象传递到 Stop-Job 来停止选定的作业。
可以使用 Stop-Job 来停止通过使用 Start-Job 或 Invoke-Command 的 AsJob 参数启动的作业。停止后台作业时,Windows PowerShell 将完成该作业队列中挂起的所有任务,然后终止作业。提交此命令之后,将不会有新任务添加到队列中。
此 cmdlet 不删除后台作业。若要删除作业,请使用 Remove-Job。
参数
-Id <Int32[]>
停止具有指定 ID 的作业。默认值为当前会话中的所有作业。
ID 是一个整数,用于在当前会话中唯一标识作业。它比 InstanceId 更容易记住和键入,但它仅仅在当前会话中是唯一的。可以键入一个或多个 ID(以逗号分隔)。要查找作业的 ID,请键入不带参数的“Get-Job”。
是否为必需? |
true |
位置? |
1 |
默认值 |
|
是否接受管道输入? |
true (ByPropertyName) |
是否接受通配符? |
false |
-InstanceId <Guid[]>
仅停止具有指定实例 ID 的作业。默认值为所有作业。
实例 ID 是一个 GUID,用于在计算机上唯一地标识作业。若要查找作业的实例 ID,请使用 Get-Job。
是否为必需? |
false |
位置? |
1 |
默认值 |
|
是否接受管道输入? |
true (ByPropertyName) |
是否接受通配符? |
false |
-Job <Job[]>
指定要停止的作业。输入包含作业的变量或获取作业的命令。也可以使用管道运算符将作业提交到 Stop-Job cmdlet。默认情况下,Stop-Job 删除在当前会话中启动的所有作业。
是否为必需? |
true |
位置? |
1 |
默认值 |
|
是否接受管道输入? |
true (ByValue, ByPropertyName) |
是否接受通配符? |
false |
-Name <string[]>
仅停止具有指定友好名称的作业。以逗号分隔的列表形式输入作业名称,或使用通配符 (*) 来输入作业名称模式。默认情况下,Stop-Job 停止在当前会话中创建的所有作业。
由于不能保证友好名称是唯一的,因此在通过名称来指定要停止的作业时,请使用 WhatIf 和 Confirm 参数。
是否为必需? |
false |
位置? |
1 |
默认值 |
|
是否接受管道输入? |
true (ByPropertyName) |
是否接受通配符? |
true |
-PassThru
返回表示新后台作业的对象。默认情况下,此 cmdlet 将不产生任何输出。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-State <JobState>
仅停止处于指定状态的作业。有效值是 NotStarted、Running、Completed、Stopped、Failed 和 Blocked。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
true (ByPropertyName) |
是否接受通配符? |
false |
-Confirm
在执行命令之前提示您进行确认。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-WhatIf
描述如果执行该命令会发生什么情况(无需实际执行该命令)。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
<CommonParameters>
此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.
输入和输出
输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。
输入 |
System.Management.Automation.RemotingJob 可将作业对象通过管道传递给 Stop-Job。 |
输出 |
“无”或 System.Management.Automation.RemotingJob 如果使用 PassThru 参数,则 Stop-Job 返回作业对象。否则,此 cmdlet 将不产生任何输出。 |
示例 1
C:\PS>$s = new-pssession -computername Server01 -credential domain01\admin02
C:\PS> $j = invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog system}}
C:\PS> invoke-command -session $s -scriptblock {param($j) stop-job -job $j} -ArgumentList $j
说明
-----------
此示例说明如何使用 Stop-Job cmdlet 停止在远程计算机上运行的作业。
由于该作业是通过使用 Invoke-Command 远程运行 Start-Job 命令而启动的,因此作业对象存储在远程计算机上,您必须使用另一个 Invoke-Command 命令来远程运行 Stop-Job 命令。有关远程后台作业的详细信息,请参阅 about_Remote_Jobs。
第一个命令在 Server01 计算机上创建一个 Windows PowerShell 会话 (PSSession),并将会话对象保存在 $s 变量中。该命令使用某个域管理员的凭据。
第二个命令使用 Invoke-Command cmdlet 在会话中运行 Start-Job 命令。作业中的此命令获取系统事件日志中的所有事件。生成的作业对象存储在 $j 变量中。
第三个命令停止作业。该命令使用 Invoke-Command cmdlet 在 Server01 上的 PSSession 中运行 Stop-Job 命令。由于作业对象存储在本地计算机上的变量 $j 中,因此该命令使用“param”关键字声明命令中的局部变量,并使用 ArgumentList 参数为变量提供值。
当该命令完成时,作业停止,$s 中的 PSSession 可供使用。
示例 2
C:\PS>stop-job -state failed
说明
-----------
此命令停止状态值为“Failed”的所有作业。
示例 3
C:\PS>stop-job -name job1
说明
-----------
此命令停止 Job1 后台作业。
示例 4
C:\PS>stop-job -id 1, 3, 4
说明
-----------
此命令停止三个作业。它通过 ID 来标识作业。
示例 5
C:\PS>get-job | stop-job
说明
-----------
此命令停止当前会话中的所有后台作业。
示例 6
C:\PS>stop-job -state blocked
说明
-----------
此命令停止作业状态为“Blocked”的所有作业。
示例 7
C:\PS>get-job | format-table ID, Name, Command, @{Label="State";Expression={$_.jobstateinfo.state}}, I
nstanceID -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
C:\PS> stop-job -instanceid e3bbfed1-9c53-401a-a2c3-a8db34336adf
说明
-----------
这些命令说明如何根据作业的实例 ID 来停止作业。
第一个命令使用 Get-Job 命令获取当前会话中的作业。该命令使用管道运算符 (|) 将作业发送到 Format-Table 命令,后者显示每个作业的指定属性的表。该表包括每个作业的实例 ID。它使用计算属性来显示作业状态。
第二个命令使用带有 InstanceID 参数的 Stop-Job 命令来停止选定的作业。
示例 8
C:\PS>$j = invoke-command -computername Server01 -scriptblock {get-eventlog system} -asjob
C:\PS> $j | stop-job -passthru
Id Name State HasMoreData Location Command
-- ---- ---- ----------- -------- -------
5 Job5 Stopped True judithh-tablet get-eventlog system
说明
-----------
此示例说明如何使用 Stop-Job cmdlet 停止在远程计算机上运行的作业。
由于作业是使用 Invoke-Command 的 AsJob 参数启动的,因此即使作业在远程计算机上运行,作业对象也位于本地计算机上。因此,可以使用本地 Stop-Job 命令来停止作业。
第一个命令使用 Invoke-Command cmdlet 在 Server01 计算机上启动后台作业。此命令使用 AsJob 参数将远程命令作为后台作业运行。
此命令返回一个作业对象,此作业对象与 Start-Job 返回的作业对象相同。此命令将作业对象保存在 $j 变量中。
第二个命令使用管道运算符将 $j 变量中的作业发送到 Stop-Job。该命令使用 PassThru 参数来指示 Stop-Job 返回作业对象。作业对象的显示确认作业的状态为“Stopped”。
有关远程后台作业的详细信息,请参阅 about_Remote_Jobs。
另请参阅
概念
about_Jobs
about_Job_Details
about_Remote_Jobs
Start-Job
Get-Job
Receive-Job
Wait-Job
Remove-Job
Invoke-Command