Stop-Job

停止 PowerShell 后台作业。

语法

SessionIdParameterSet (默认值)

Stop-Job
    [-Id] <Int32[]>
    [-PassThru]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

JobParameterSet

Stop-Job
    [-Job] <Job[]>
    [-PassThru]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

NameParameterSet

Stop-Job
    [-Name] <String[]>
    [-PassThru]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

InstanceIdParameterSet

Stop-Job
    [-InstanceId] <Guid[]>
    [-PassThru]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

StateParameterSet

Stop-Job
    [-State] <JobState>
    [-PassThru]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

FilterParameterSet

Stop-Job
    [-Filter] <Hashtable>
    [-PassThru]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

说明

Stop-Job cmdlet 停止正在进行的 PowerShell 后台作业。 可以使用此 cmdlet 根据作业的名称、ID、实例 ID 或状态来停止所有作业或停止所选作业,或者通过将作业对象传递给 停止作业

可以使用 停止作业 来停止后台作业,例如使用 Start-Job cmdlet 启动的作业或任何 cmdlet 的 AsJob 参数。 停止后台作业时,PowerShell 将完成该作业队列中挂起的所有任务,然后结束该作业。 提交此命令后,不会向队列添加新任务。

此 cmdlet 不会删除后台作业。 若要删除作业,请使用 Remove-Job cmdlet。

从 Windows PowerShell 3.0 开始,停止作业 也会停止自定义作业类型,例如工作流作业和计划作业的实例。 若要启用 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 计算机上创建 PowerShell 会话(PSSession),然后将会话对象存储在 $s 变量中。 该命令使用域管理员的凭据。

第二个命令使用 Invoke-Command cmdlet 在会话中运行 Start-Job 命令。 作业中的命令获取系统事件日志中的所有事件。 生成的作业对象存储在$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。 它使用计算属性来显示作业状态。

第二个命令使用具有 InstanceID 参数的 Stop-Job 命令来停止所选作业。

示例 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 停止在远程计算机上运行的作业。

由于作业是使用 Invoke-Command cmdlet 的 AsJob 参数启动的,因此作业对象位于本地计算机上,即使作业在远程计算机上运行也是如此。 因此,可以使用本地 停止作业 命令来停止作业。

第一个命令使用 Invoke-Command cmdlet 在 Server01 计算机上启动后台作业。 该命令使用 AsJob 参数将远程命令作为后台作业运行。

此命令返回作业对象,该对象与 Start-Job cmdlet 返回的作业对象相同。 该命令将作业对象保存在$j变量中。

第二个命令使用管道运算符将$j变量中的作业发送到 Stop-Job。 该命令使用 PassThru 参数指示 Stop-Job 返回作业对象。 作业对象显示确认作业的状态已停止。

有关远程后台作业的详细信息,请参阅about_Remote_Jobs。

参数

-Confirm

在运行 cmdlet 之前,提示你进行确认。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False
别名:cf

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Filter

指定条件的哈希表。 此 cmdlet 停止满足所有条件的作业。 输入一个哈希表,其中键是作业属性,值是作业属性值。

此参数仅适用于自定义作业类型,例如工作流作业和计划作业。 它不适用于标准后台作业,例如使用 Start-Job cmdlet 创建的作业。 有关此参数支持的信息,请参阅作业类型的帮助主题。

此参数是在 Windows PowerShell 3.0 中引入的。

参数属性

类型:Hashtable
默认值:None
支持通配符:False
不显示:False

参数集

FilterParameterSet
Position:0
必需:True
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-Id

指定此 cmdlet 停止的作业 ID。 默认值为当前会话中的所有作业。

ID 是一个整数,用于在当前会话中唯一标识作业。 它比实例 ID 更容易记住和键入,但它仅在当前会话中是唯一的。 可以键入一个或多个 ID,用逗号分隔。 若要查找作业的 ID,请键入 Get-Job

参数属性

类型:

Int32[]

默认值:All jobs
支持通配符:False
不显示:False

参数集

SessionIdParameterSet
Position:0
必需:True
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-InstanceId

指定此 cmdlet 停止的作业的实例 ID。 默认值为所有作业。

实例 ID 是一个 GUID,用于在计算机上唯一标识作业。 若要查找作业的实例 ID,请使用 Get-Job。

参数属性

类型:

Guid[]

默认值:All jobs
支持通配符:False
不显示:False

参数集

InstanceIdParameterSet
Position:0
必需:True
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-Job

指定此 cmdlet 停止的作业。 输入一个包含作业的变量或一个获取作业的命令。 还可以使用管道运算符将作业提交到 Stop-Job cmdlet。 默认情况下,Stop-Job 删除当前会话中启动的所有作业。

参数属性

类型:

Job[]

默认值:All jobs
支持通配符:False
不显示:False

参数集

JobParameterSet
Position:0
必需:True
来自管道的值:True
来自管道的值(按属性名称):True
来自剩余参数的值:False

-Name

指定此 cmdlet 停止的作业的友好名称。 在逗号分隔列表中输入作业名称,或使用通配符 ** 输入作业名称模式。 默认情况下,停止作业 停止在当前会话中创建的所有作业。

由于友好名称不能保证唯一,因此在按名称停止作业时,请使用 WhatIf确认 参数。

参数属性

类型:

String[]

默认值:All jobs
支持通配符:True
不显示:False

参数集

NameParameterSet
Position:0
必需:True
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-PassThru

返回一个对象,该对象表示你正在处理的项目。 默认情况下,此 cmdlet 不生成任何输出。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-State

指定作业状态。 此 cmdlet 仅停止处于指定状态的作业。 此参数的可接受值为:

  • NotStarted
  • 跑步
  • 完成
  • 已失败
  • 已停止
  • 封锁
  • 已暂停
  • 已断开连接
  • 暂停中
  • 停止中

有关作业状态的详细信息,请参阅 MSDN 库中 JobState 枚举

参数属性

类型:JobState
默认值:All jobs
接受的值:NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint
支持通配符:False
不显示:False

参数集

StateParameterSet
Position:0
必需:True
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-WhatIf

显示 cmdlet 运行时会发生什么情况。 命令脚本未运行。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False
别名:无线

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

CommonParameters

此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters

输入

System.Management.Automation.RemotingJob

你可以通过管道将作业对象传递给此 cmdlet。

输出

None, System.Management.Automation.PSRemotingJob

如果指定 PassThru 参数,则此 cmdlet 将返回作业对象。 否则,此 cmdlet 不会生成任何输出。