Stop-Job (Microsoft.PowerShell.Core)
Stop-Job
- 模块 :
- Microsoft.PowerShell.Core
停止 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 或 AsJob 参数启动的后台作业任何 cmdlet。当您停止后台作业时,PowerShell 会完成该作业队列中待处理的所有任务,然后结束该作业。提交该命令后,队列中不会添加新任务。
此 cmdlet 不会删除后台作业。要删除作业,请使用 Remove-Job cmdlet。
从 Windows PowerShell 3.0 开始,Stop-Job 还会停止自定义作业类型,例如 WorkflowJobs 和 ScheduledJobs 实例。要启用 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 -LogName 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 计算机上创建 PowerShell 会话 (PSSession),然后将会话对象存储在 $s 变量中。该命令使用域管理员的凭据。
第二个命令使用 Invoke-Command cmdlet 在会话中运行 Start-Job 命令。作业中的命令获取系统事件日志中的所有事件。生成的作业对象存储在 $j 变量中。
第三个命令停止作业。它使用 Invoke-Command cmdlet 在 Server01 上的 PSSession 中运行 Stop-Job 命令。由于作业对象存储在本地计算机上的变量 $j 中,因此该命令使用 Using 作用域修饰符来标识 $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
这些命令展示了如何根据作业的InstanceID停止作业。
第一个命令使用 Get-Job cmdlet 获取当前会话中的作业。该命令使用管道运算符 (|) 将作业发送到 Format-Table 命令,该命令显示每个作业的指定属性的表格。该表包含每个作业的InstanceID。它使用计算属性来显示作业状态。
第二个命令使用具有 InstanceID 参数的 Stop-Job 命令来停止选定的作业。
示例 7:停止远程计算机上的作业
$j = Invoke-Command -ComputerName Server01 -ScriptBlock {Get-EventLog -LogName System} -AsJob
$j | Stop-Job -PassThru
Id Name State HasMoreData Location Command
-- ---- ---- ----------- -------- -------
5 Job5 Stopped True user01-tablet Get-EventLog -LogName Sy...此示例演示如何使用 Stop-Job cmdlet 停止远程计算机上正在运行的作业。
由于作业是使用 Invoke-Command cmdlet 的 AsJob 参数启动的,因此 Job 对象位于本地计算机上,即使作业在远程计算机上运行。因此,您可以使用本地 Stop-Job 命令来停止作业。
第一个命令使用 Invoke-Command cmdlet 在 Server01 计算机上启动后台作业。该命令使用 AsJob 参数将远程命令作为后台作业运行。
此命令返回一个作业对象,该对象与 Start-Job cmdlet 返回的作业对象相同。该命令将作业对象保存在 $j 变量中。
第二个命令使用管道运算符将 $j 变量中的作业发送到 Stop-Job。该命令使用 PassThru 参数指示 Stop-Job 返回作业对象。作业对象显示确认作业状态为“已停止”。
有关远程后台作业的更多信息,请参阅 about_Remote_Jobs。
参数
-Confirm
在运行 cmdlet 之前提示您进行确认。
- 类型 :
-
SwitchParameter
- 别名:
cf
- 位置:
命名
- 默认值:
False
- 必需的:
False
- 接受管道输入:
False
- 接受通配符:
False
-Filter
指定条件的哈希表。此 cmdlet 停止满足每个条件的作业。输入一个哈希表,其中键是作业属性,值是作业属性值。
此参数仅适用于自定义作业类型,例如 WorkflowJobs 和 ScheduledJobs。它不适用于标准后台作业,例如使用 Start-Job cmdlet 创建的作业。有关此参数支持的信息,请参阅作业类型的帮助主题。
此参数是在 Windows PowerShell 3.0 中引入的。
- 类型 :
哈希表
- 位置:
0
- 默认值:
None
- 必需的:
True
- 接受管道输入:
True
- 接受通配符:
False
-Id
指定此 cmdlet 停止的作业的 ID。默认为当前会话中的所有作业。
ID 是一个整数,唯一标识当前会话中的作业。它比实例 ID 更容易记住和输入,但它仅在当前会话中是唯一的。您可以键入一个或多个 ID,以逗号分隔。要查找作业的 ID,请输入 Get-Job。
- 类型 :
Int32[]
- 位置:
0
- 默认值:
所有职位
- 必需的:
True
- 接受管道输入:
True
- 接受通配符:
False
-InstanceId
指定此 cmdlet 停止的作业的实例 ID。默认为所有作业。
实例 ID 是唯一标识计算机上作业的 GUID。要查找作业的实例 ID,请使用 Get-Job。
- 类型 :
指导[]
- 位置:
0
- 默认值:
所有职位
- 必需的:
True
- 接受管道输入:
True
- 接受通配符:
False
-Job
指定此 cmdlet 停止的作业。输入包含作业的变量或获取作业的命令。您还可以使用管道运算符将作业提交到 Stop-Job cmdlet。默认情况下,Stop-Job 会删除当前会话中启动的所有作业。
- 类型 :
工作[]
- 位置:
0
- 默认值:
所有职位
- 必需的:
True
- 接受管道输入:
True
- 接受通配符:
False
-Name
指定此 cmdlet 停止的作业的友好名称。在以逗号分隔的列表中输入作业名称,或使用通配符 (*) 输入作业名称模式。默认情况下,Stop-Job 停止当前会话中创建的所有作业。
由于不能保证友好名称是唯一的,因此在按名称停止作业时请使用 WhatIf 和 Confirm 参数。
- 类型 :
String[]
- 位置:
0
- 默认值:
所有职位
- 必需的:
True
- 接受管道输入:
True
- 接受通配符:
True
-PassThru
返回一个代表您正在使用的项目的对象。默认情况下,此 cmdlet 不生成任何输出。
- 类型 :
SwitchParameter
- 位置:
命名
- 默认值:
False
- 必需的:
False
- 接受管道输入:
False
- 接受通配符:
False
-State
指定作业状态。此 cmdlet 仅停止处于指定状态的作业。该参数可接受的值为:
NotStartedRunningCompletedFailedStoppedBlockedSuspendedDisconnectedSuspendingStopping有关作业状态的更多信息,请参阅 JobState 枚举。
- 类型 :
JobState
- 接受的值:
未启动、正在运行、已完成、失败、已停止、已阻止、已挂起、已断开连接、挂起、正在停止、AtBreakpoint
- 位置:
0
- 默认值:
所有职位
- 必需的:
True
- 接受管道输入:
True
- 接受通配符:
False
-WhatIf
显示 cmdlet 运行时会发生什么情况。该 cmdlet 未运行。
- 类型 :
SwitchParameter
- 别名:
wi
- 位置:
命名
- 默认值:
False
- 必需的:
False
- 接受管道输入:
False
- 接受通配符:
False
输入
System.Management.Automation.RemotingJob
您可以通过管道将作业对象传递给此 cmdlet。
输出
无
默认情况下,此 cmdlet 不返回任何输出。
System.Management.Automation.PSRemotingJob
当您使用 PassThru 参数时,此 cmdlet 将返回一个作业对象。
笔记
PowerShell 包含以下 Stop-Job 别名:
所有平台:
spjb