共用方式為


Stop-Job

停止 PowerShell 背景工作。

Syntax

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>]

Description

Cmdlet Stop-Job 會停止進行中的PowerShell背景工作。 您可以使用此 Cmdlet 來停止所有作業,或根據其名稱、識別碼、實例識別碼或狀態來停止選取的作業,或將作業物件傳遞至 Stop-Job

您可以使用 Stop-Job 來停止背景工作,例如使用任何 Cmdlet 的 Cmdlet 或 AsJob 參數啟動Start-Job的背景工作。 當您停止背景作業時,PowerShell 會完成該作業佇列中擱置的所有工作,然後結束作業。 在送出這個命令之後,就不會再新增任何新工作到佇列中。

此 Cmdlet 不會刪除背景工作。 若要刪除作業,請使用 Remove-Job Cmdlet。

從 Windows PowerShell 3.0 開始,Stop-Job也會停止自定義作業類型,例如 WorkflowJobsScheduledJobs 的實例。 若要啟用 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 來停止在遠端電腦上執行的作業。

因為作業是從 Cmdlet 開始 Invoke-Command 遠端執行 Start-Job 命令,所以作業物件會儲存在遠端電腦上。 您必須使用另一個Invoke-CommandStop-Job命令從遠端執行命令。 如需有關遠端背景工作的詳細資訊,請參閱 about_Remote_Jobs。

第一個命令會在 Server01 計算機上建立 PowerShell 工作階段 (PSSession) ,然後將會話物件儲存在變數中 $s 。 命令使用網域系統管理員的認證。

第二個Start-Job命令會Invoke-Command使用 Cmdlet 在工作階段中執行命令。 工作中的命令取得 System 事件記錄檔中的所有事件。 產生的作業物件會儲存在變數中 $j

第三個命令停止工作。 它會使用 Invoke-Command Cmdlet 在 Server01 上的 PSSession 中執行Stop-Job命令。 由於作業物件儲存在 $j中,這是本機計算機上的變數,所以命令會使用 Using scope 修飾詞來識別 $j 為局部變數。 如需 使用 範圍修飾詞的詳細資訊,請參閱 about_Remote_Variables

當命令完成時,作業會停止,而 中的 $sPSSession 可供使用。

範例 2︰停止背景工作

Stop-Job -Name "Job1"

此命令會 Job1 停止背景工作。

範例 3︰停止幾個背景工作

Stop-Job -Id 1, 3, 4

此命令停止三個工作。 它會 依標識碼來識別它們。

範例 4︰停止所有背景工作

Get-Job | Stop-Job

此命令停止目前工作階段中的所有背景工作。

範例 5︰停止所有已封鎖的背景工作

Stop-Job -State Blocked

此命令停止所有已封鎖的工作。

範例 6:依實例標識符停止作業

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 。 它使用計算的屬性來顯示工作狀態。

第二個 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 的 Invoke-CommandAsJob 參數啟動,所以 Job 物件位於本機電腦上,即使作業在遠端電腦上執行也一樣。 因此,您可以使用本機 Stop-Job 命令來停止作業。

第一個命令會 Invoke-Command 使用 Cmdlet 在 Server01 計算機上啟動背景作業。 命令使用 AsJob 參數將遠端命令當作背景工作來執行。

此命令會傳回作業物件,此物件與 Cmdlet 傳回的作業物件 Start-Job 相同。 此命令會將作業物件儲存在變數中 $j

第二個命令會使用管線運算子將變數中的 $j 作業傳送至 Stop-Job。 此命令會使用 PassThru 參數直接 Stop-Job 傳回作業物件。 工作物件顯示會確認工作的狀態為 Stopped。

如需遠端背景工作的詳細資訊,請參閱 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 會停止滿足每個條件的作業。 輸入索引鍵為工作屬性且值為工作屬性值的雜湊表。

此參數僅適用於自定義作業類型,例如 WorkflowJobsScheduledJobs。 它不適用於標準背景工作,例如使用 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 停止之工作的識別碼。 預設為目前工作階段中的所有工作。

識別碼是一個整數,可唯一識別目前工作階段中的工作。 與執行個體識別碼相比,它比較容易記住並輸入,但是它只有在目前的工作階段內是唯一的。 您可以輸入一個或多個識別碼,以逗號分隔。 若要尋找工作的識別碼,請輸入 Get-Job

Type:Int32[]
Position:0
Default value:All jobs
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-InstanceId

指定此 Cmdlet 停止之工作的執行個體識別碼。 預設為所有工作。

執行個體識別碼是 GUID,可唯一識別電腦上的工作。 若要尋找作業的實體識別碼,請使用 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 會停止在目前會話中建立的所有作業。

因為易記名稱不保證是唯一的,所以依名稱停止作業時,請使用 WhatIfConfirm 參數。

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
  • Running
  • Completed
  • Failed
  • Stopped
  • Blocked
  • Suspended
  • Disconnected
  • Suspending
  • Stopping

如需作業狀態的詳細資訊,請參閱 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 不會產生任何輸出。