停止 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-JobInvoke-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。

输出

None 或 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。






另请参阅




目录