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 cmdlet Stop-Job
beendet PowerShell-Hintergrundaufträge, die ausgeführt werden. Mit diesem Cmdlet können Sie alle Aufträge beenden oder ausgewählte Aufträge basierend auf dem Namen, der ID, der Instanz-ID oder dem Status beenden oder ein Auftragsobjekt an Stop-Job
übergeben.
Sie können Stop-Job
verwenden, um Hintergrundaufträge zu beenden, z. B. die, die mit dem Cmdlet Start-Job
oder dem AsJob Parameter eines cmdlets gestartet wurden. Wenn Sie einen Hintergrundauftrag beenden, schließt PowerShell alle Aufgaben ab, die in dieser Auftragswarteschlange ausstehen und dann den Auftrag beenden. Nach dem Senden dieses Befehls werden der Warteschlange keine neuen Aufgaben hinzugefügt.
Dieses Cmdlet löscht keine Hintergrundaufträge. Verwenden Sie das Cmdlet Remove-Job
, um einen Auftrag zu löschen.
Ab Windows PowerShell 3.0 beendet Stop-Job
auch benutzerdefinierte Auftragstypen, z. B. WorkflowJobs und Instanzen von ScheduledJobs. Um Stop-Job
das Beenden eines Auftrags mit benutzerdefiniertem Auftragstyp zu aktivieren, importieren Sie das Modul, das den benutzerdefinierten Auftragstyp unterstützt, in die Sitzung, bevor Sie einen Stop-Job
-Befehl ausführen, entweder mithilfe des Cmdlets Import-Module
oder mithilfe oder Abrufen eines Cmdlets im Modul. Informationen zu einem bestimmten benutzerdefinierten Auftragstyp finden Sie in der Dokumentation des Features für den benutzerdefinierten Auftragstyp.
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 das Cmdlet Stop-Job
verwenden, um einen Auftrag zu beenden, der auf einem Remotecomputer ausgeführt wird.
Da der Auftrag mit dem Cmdlet Invoke-Command
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 cmdlet Invoke-Command
, 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 variablen $j
gespeichert.
Der dritte Befehl beendet den Auftrag. Es verwendet das cmdlet Invoke-Command
zum Ausführen eines Stop-Job
Befehls im PSSession- auf Server01. Da die Auftragsobjekte in $j
gespeichert werden, bei dem es sich um eine Variable auf dem lokalen Computer handelt, verwendet der Befehl die Using Bereichsmodifizierer, um $j
als lokale Variable zu identifizieren. Weitere Informationen zum Verwenden Bereichsmodifizierers finden Sie unter about_Remote_Variables.
Nach Abschluss des Befehls 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 in der aktuellen Sitzung beendet.
Beispiel 5: Beenden aller blockierten Hintergrundaufträge
Stop-Job -State Blocked
Mit diesem Befehl werden alle blockierten Aufträge beendet.
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 der InstanceID-beenden.
Der erste Befehl verwendet das Cmdlet Get-Job
, 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. Es verwendet eine berechnete Eigenschaft, um den Auftragszustand anzuzeigen.
Der zweite Befehl verwendet einen Stop-Job
Befehl, der den parameter InstanceID enthält, 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 das Cmdlet Stop-Job
verwenden, um einen Auftrag zu beenden, der auf einem Remotecomputer ausgeführt wird.
Da der Auftrag mit dem parameter AsJob des Cmdlets Invoke-Command
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 Cmdlet Invoke-Command
, 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 cmdlet Start-Job
zurückgegeben wird.
Der Befehl speichert das Auftragsobjekt in der variablen $j
.
Der zweite Befehl verwendet einen Pipelineoperator, um den Auftrag in der variablen $j
an Stop-Job
zu senden. Der Befehl verwendet den PassThru--Parameter, um Stop-Job
zum Zurückgeben eines Auftragsobjekts zu leiten. Die Auftragsobjektanzeige bestätigt, dass der Status des Auftrags beendet ist.
Weitere Informationen zu Remotehintergrundaufträgen finden Sie unter about_Remote_Jobs.
Parameter
-Confirm
Fordert Sie vor dem Ausführen des Cmdlets zur Bestätigung auf.
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 Auftragseigenschaftswerte sind.
Dieser Parameter funktioniert nur für benutzerdefinierte Auftragstypen wie WorkflowJobs und ScheduledJobs. Es funktioniert nicht für Standard-Hintergrundaufträge, z. B. für solche, die mit dem Cmdlet Start-Job
erstellt wurden.
Informationen zur Unterstützung für diesen Parameter finden Sie im 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 Get-Job
ein, um die ID eines Auftrags zu finden.
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. Der Standardwert ist alle Aufträge.
Eine Instanz-ID ist eine GUID, die den Auftrag auf dem Computer eindeutig identifiziert. Um die Instanz-ID eines Auftrags zu finden, verwenden Sie Get-Job
.
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 die Aufträge enthält, oder einen Befehl, der die Aufträge abruft. Sie können auch einen Pipelineoperator verwenden, um Aufträge an das Cmdlet Stop-Job
zu übermitteln. Standardmäßig löscht Stop-Job
alle Aufträge, 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 (*
). Standardmäßig beendet Stop-Job
alle Aufträge, die in der aktuellen Sitzung erstellt wurden.
Da der Anzeigename nicht garantiert eindeutig ist, verwenden Sie die WhatIf und Bestätigen Parameter beim Beenden von Aufträgen anhand des Namens.
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 generiert dieses Cmdlet keine Ausgabe.
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. Die zulässigen Werte für diesen Parameter sind:
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 passiert, 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 parameter PassThru verwenden, gibt dieses Cmdlet ein Auftragsobjekt zurück.
Hinweise
PowerShell enthält die folgenden Aliase für Stop-Job
:
- Alle Plattformen:
spjb