Freigeben über


Stop-Job

Beendet einen PowerShell-Hintergrundauftrag.

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

Beschreibung

Das Stop-Job Cmdlet stoppt PowerShell-Hintergrundaufträge, die ausgeführt werden. Mit diesem Cmdlet können Sie alle Aufträge beenden oder ausgewählte Aufträge basierend auf ihrem Namen, der ID, der Instanz-ID oder dem Status beenden oder ein Auftragsobjekt Stop-Joban .

Sie können verwenden Stop-Job , um Hintergrundaufträge zu beenden, z. B. die, die mit dem Start-Job Cmdlet oder dem AsJob-Parameter eines beliebigen Cmdlets gestartet wurden. Wenn Sie einen Hintergrundauftrag beenden, schließt PowerShell alle Aufgaben ab, die in dieser Auftragswarteschlange ausstehen und dann den Auftrag beenden. Keine neuen Vorgänge werden in die Warteschlange hinzugefügt, nachdem dieser Befehl gesendet wird.

Mit diesem Cmdlet werden die Hintergrundaufträge nicht gelöscht. Verwenden Sie das Remove-Job Cmdlet, um einen Auftrag zu löschen.

Ab Windows PowerShell 3.0 Stop-Job werden auch benutzerdefinierte Auftragstypen wie WorkflowJobs und Instanzen von ScheduledJobs beendet. Um das Beenden eines Auftrags mit benutzerdefiniertem Auftragstyp zu ermöglichen Stop-Job , importieren Sie das Modul, das den benutzerdefinierten Auftragstyp unterstützt, in die Sitzung, bevor Sie einen Stop-Job Befehl ausführen, entweder mithilfe des Import-Module Cmdlets oder mithilfe oder Abrufen eines Cmdlets im Modul. Informationen zu einem bestimmten benutzerdefinierten Auftragstyp finden Sie in der Dokumentation der Funktion „Benutzerdefinierte Auftragstypen“.

Beispiele

Beispiel 1: Beenden eines Auftrags auf einem Remotecomputer mit 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 }

In diesem Beispiel wird gezeigt, wie Sie mit dem Cmdlet einen Auftrag beenden, der Stop-Job auf einem Remotecomputer ausgeführt wird.

Da der Auftrag mit dem Invoke-Command Cmdlet gestartet wurde, um einen Start-Job Befehl remote auszuführen, wird das Auftragsobjekt auf dem Remotecomputer gespeichert. Sie müssen einen anderen Invoke-Command Befehl verwenden, um einen Stop-Job Befehl remote auszuführen. Weitere Informationen zu Remotehintergrundaufträgen finden Sie unter „about_Remote_Jobs“.

Der erste Befehl erstellt eine PowerShell-Sitzung (PSSession) auf dem Server01-Computer und speichert dann das Sitzungsobjekt in der $s Variablen. Der Befehl verwendet die Anmeldeinformationen eines Domänenadministrators.

Der zweite Befehl verwendet das Invoke-Command Cmdlet, um einen Start-Job Befehl in der Sitzung auszuführen. Der Befehl im Auftrag ruft alle Ereignisse im Systemereignisprotokoll ab. Das resultierende Auftragsobjekt wird in der $j Variablen gespeichert.

Mit dem dritten Befehl wird der Auftrag beendet. Es verwendet das Invoke-Command Cmdlet, um einen Stop-Job Befehl in der PSSession auf Server01 auszuführen. Da die Auftragsobjekte gespeichert $jsind, bei der es sich um eine Variable auf dem lokalen Computer handelt, verwendet der Befehl den Using-Bereichsmodifizierer , um als lokale Variable zu identifizieren $j . Weitere Informationen zum Verwenden des Bereichsmodifizierers finden Sie unter about_Remote_Variables.

Wenn der Befehl abgeschlossen ist, wird der Auftrag beendet, und die PSSession in $s ist zur Verwendung verfügbar.

Beispiel 2: Beenden eines Hintergrundauftrags

Stop-Job -Name "Job1"

Mit diesem Befehl wird der Job1 Hintergrundauftrag beendet.

Beispiel 3: Beenden mehrerer Hintergrundaufträge

Stop-Job -Id 1, 3, 4

Mit diesem Befehl werden drei Aufträge beendet. Sie identifiziert sie anhand ihrer IDs.

Beispiel 4: Beenden aller Hintergrundaufträge

Get-Job | Stop-Job

Mit diesem Befehl werden alle Hintergrundaufträge im in der aktuellen Sitzung beendet.

Beispiel 5: Beenden aller blockierten Hintergrundaufträge

Stop-Job -State Blocked

Dieser Befehl beendet alle Aufträge, die blockiert sind.

Beispiel 6: Beenden eines Auftrags nach Instanz-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

Diese Befehle zeigen, wie Sie einen Auftrag basierend auf seiner InstanceID beenden.

Der erste Befehl verwendet das Get-Job Cmdlet, um die Aufträge in der aktuellen Sitzung abzurufen. Der Befehl verwendet einen Pipelineoperator (|), um die Aufträge an einen Format-Table Befehl zu senden, der eine Tabelle der angegebenen Eigenschaften der einzelnen Aufträge anzeigt. Die Tabelle enthält die InstanceID jedes Auftrags. Er verwendet eine berechnete Eigenschaft, um den Auftragsstatus anzuzeigen.

Der zweite Befehl verwendet einen Stop-Job Befehl mit dem Parameter "InstanceID ", um einen ausgewählten Auftrag zu beenden.

Beispiel 7: Beenden eines Auftrags auf einem Remotecomputer

$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...

In diesem Beispiel wird gezeigt, wie Sie mit dem Cmdlet einen Auftrag beenden, der Stop-Job auf einem Remotecomputer ausgeführt wird.

Da der Auftrag mit dem Parameter "AsJob " des Invoke-Command Cmdlets gestartet wurde, befindet sich das Job-Objekt auf dem lokalen Computer, obwohl der Auftrag auf dem Remotecomputer ausgeführt wird. Daher können Sie einen lokalen Stop-Job Befehl verwenden, um den Auftrag zu beenden.

Der erste Befehl verwendet das Invoke-Command Cmdlet, um einen Hintergrundauftrag auf dem Server01-Computer zu starten. Der Befehl verwendet den AsJob-Parameter , um den Remotebefehl als Hintergrundauftrag auszuführen.

Dieser Befehl gibt ein Auftragsobjekt zurück, bei dem es sich um dasselbe Auftragsobjekt handelt, das vom Start-Job Cmdlet zurückgegeben wird. Der Befehl speichert das Auftragsobjekt in der $j Variablen.

Der zweite Befehl verwendet einen Pipelineoperator, um den Auftrag in der $j Variablen an .Stop-Job Der Befehl verwendet den PassThru-Parameter , um Stop-Job ein Auftragsobjekt zurückzugeben. Die Auftragsobjektanzeige bestätigt, dass der Status des Auftrags beendet ist.

Weitere Informationen zu Remotehintergrundaufträgen finden Sie unter about_Remote_Jobs.

Parameter

-Confirm

Hiermit werden Sie vor der Ausführung des Cmdlets zur Bestätigung aufgefordert.

Typ:SwitchParameter
Aliase:cf
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Filter

Gibt eine Hashtabelle mit Bedingungen an. Dieses Cmdlet beendet Aufträge, die jede Bedingung erfüllen. Geben Sie eine Hashtabelle ein, in der die Schlüssel Auftragseigenschaften und die Werte Werte der Auftragseigenschaften sind.

Dieser Parameter funktioniert nur für benutzerdefinierte Auftragstypen, z . B. WorkflowJobs und ScheduledJobs. Es funktioniert nicht bei Standardhintergrundaufträgen, z. B. bei denen, die mit dem Start-Job Cmdlet erstellt wurden. Weitere Informationen zur Unterstützung für diesen Parameter finden Sie unter dem Hilfethema für den Auftragstyp.

Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.

Typ:Hashtable
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-Id

Gibt die IDs von Aufträgen an, die dieses Cmdlet beendet. Der Standardwert ist alle Aufträge in der aktuellen Sitzung.

Die ID ist eine ganze Zahl, die den Auftrag in der aktuellen Sitzung eindeutig identifiziert. Es ist einfacher zu merken und einzugeben als die Instanz-ID, aber sie ist nur in der aktuellen Sitzung eindeutig. Sie können eine oder mehrere IDs eingeben, getrennt durch Kommas. Geben Sie die ID eines Auftrags ein.Get-Job

Typ:Int32[]
Position:0
Standardwert:All jobs
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-InstanceId

Gibt die Instanz-IDs von Aufträgen an, die dieses Cmdlet beendet. Standardmäßig werden alle Aufträge fortgesetzt.

Eine Instanz-ID ist eine GUID, die den Auftrag auf dem Computer eindeutig identifiziert. Verwenden Sie die Instanz-ID eines Auftrags, um Get-Jobdie Instanz-ID eines Auftrags zu finden.

Typ:Guid[]
Position:0
Standardwert:All jobs
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-Job

Gibt die Aufträge an, die dieses Cmdlet beendet. Geben Sie eine Variable ein, die entweder die Aufträge oder einen Befehl enthält, durch den die Aufträge abgerufen werden. Sie können auch einen Pipelineoperator verwenden, um Aufträge an das Stop-Job Cmdlet zu übermitteln. Standardmäßig werden alle Aufträge gelöscht, Stop-Job die in der aktuellen Sitzung gestartet wurden.

Typ:Job[]
Position:0
Standardwert:All jobs
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-Name

Gibt Anzeigenamen von Aufträgen an, die dieses Cmdlet beendet. Geben Sie die Auftragsnamen in eine durch Trennzeichen getrennte Liste ein, oder verwenden Sie Zum Eingeben eines Auftragsnamenmusters Wildcardzeichen (*). Beendet standardmäßig alle Aufträge, Stop-Job die in der aktuellen Sitzung erstellt wurden.

Da der Anzeigename nicht garantiert eindeutig ist, verwenden Sie die Parameter WhatIf und Confirm , wenn Aufträge anhand des Namens beendet werden.

Typ:String[]
Position:0
Standardwert:All jobs
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:True

-PassThru

Gibt ein Objekt zurück, das das Element darstellt, mit dem Sie arbeiten. Standardmäßig wird von diesem Cmdlet keine Ausgabe generiert.

Typ:SwitchParameter
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-State

Gibt einen Auftragsstatus an. Dieses Cmdlet stoppt nur Aufträge im angegebenen Zustand. Zulässige Werte für diesen Parameter:

  • NotStarted
  • Running
  • Completed
  • Failed
  • Stopped
  • Blocked
  • Suspended
  • Disconnected
  • Suspending
  • Stopping

Weitere Informationen zu Auftragszuständen finden Sie unter JobState Enumeration.

Typ:JobState
Zulässige Werte:NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint
Position:0
Standardwert:All jobs
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-WhatIf

Zeigt, was geschieht, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.

Typ:SwitchParameter
Aliase:wi
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

Eingaben

System.Management.Automation.RemotingJob

Sie können ein Auftragsobjekt an dieses Cmdlet weiterleiten.

Ausgaben

None

Standardmäßig gibt dieses Cmdlet keine Ausgabe zurück.

System.Management.Automation.PSRemotingJob

Wenn Sie den PassThru-Parameter verwenden, gibt dieses Cmdlet ein Auftragsobjekt zurück.

Hinweise

PowerShell enthält die folgenden Aliase für Stop-Job:

  • Alle Plattformen:
    • spjb