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 Cmdlet Stop-Job beendet die laufenden PowerShell-Hintergrundaufträge. Sie können dieses Cmdlet verwenden, um alle Aufträge zu beenden oder ausgewählte Aufträge basierend auf ihrem Namen, ihrer ID, instance ID oder ihrem Status zu beenden oder indem Sie ein Auftragsobjekt an Stop-Job übergeben.

Sie können Stop-Job verwenden, um Hintergrundaufträge zu beenden, z. B. solche, die mit dem Cmdlet Start-Job 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 beendet dann den Auftrag. 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 zum Löschen eines Auftrags das Cmdlet Remove-Job.

Ab Windows PowerShell 3.0 beendet Stop-Job auch benutzerdefinierte Auftragstypen, z. B. Workflowaufträge und Instanzen geplanter Aufträge. Damit Stop-Job einen Auftrag mit benutzerdefiniertem Auftragstyp beenden kann, 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 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 mithilfe von 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 }

Dieses Beispiel zeigt, wie Sie das Stop-Job-Cmdlet verwenden, um einen Auftrag zu beenden, der auf einem Remotecomputer ausgeführt wird.

Da der Auftrag mithilfe des Cmdlets 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 variablen $s. Der Befehl verwendet die Anmeldeinformationen eines Domänenadministrators.

Der zweite Befehl verwendet das Invoke-Command-Cmdlet zum Ausführen eines Start-Job-Befehls in der Sitzung. 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 Cmdlet Invoke-Command , um einen Stop-Job-Befehl in der PSSession auf Server01 auszuführen. Da die Auftragsobjekte in $j, einer Variablen auf dem lokalen Computer, gespeichert werden, verwendet der Befehl den „Using“-Bereichsbezeichner, um $j als lokale Variable zu identifizieren. 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 steht zur Verwendung zur Verfügung.

Beispiel 2: Beenden eines Hintergrundauftrags

Stop-Job -Name "Job1"

Dieser Befehl beendet den Hintergrundauftrag Job1.

Beispiel 3: Beenden mehrerer Hintergrundaufträge

Stop-Job -Id 1, 3, 4

Mit diesem Befehl werden drei Aufträge beendet. Sie werden anhand der ID identifiziert.

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 mithilfe einer instance-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 veranschaulichen die Beendigung eines Auftrags basierend auf der Instanz-ID.

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 mit den angegebenen Eigenschaften der einzelnen Aufträge anzeigt. Die Tabelle enthält die Instanz-ID für jeden Auftrag. Er verwendet eine berechnete Eigenschaft, um den Auftragsstatus anzuzeigen.

Der zweite Befehl verwendet einen Stop-Job-Befehl , der über den InstanceID-Parameter verfügt, um einen ausgewählten Auftrag zu beenden.

Beispiel 7: Beenden eines Auftrags auf einem Remotecomputer

$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

Dieses Beispiel zeigt, wie Sie das Stop-Job-Cmdlet verwenden, um einen Auftrag zu beenden, der auf einem Remotecomputer ausgeführt wird.

Da der Auftrag mit dem AsJob-Parameter des Invoke-Command-Cmdlets gestartet wurde, befindet sich das Auftragsobjekt 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 Computer Server01 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 das gleiche Auftragsobjekt handelt, das vom Start-Job-Cmdlet zurückgegeben wird. Der Befehl speichert das Auftragsobjekt in der $j-Variablen.

Der zweite zweite Befehl verwendet einen Pipelineoperator, um den Auftrag in der $j-Variablen an „Stop-Job“ zu senden. Der Befehl verwendet den PassThru-Parameter, um Stop-Job anzuweisen, ein Auftragsobjekt zurückgegeben. 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.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Filter

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

Dieser Parameter funktioniert nur mit benutzerdefinierten Auftragstypen, z. B. Workflowaufträgen und geplanten Aufträgen. Sie funktioniert nicht für Standard-Hintergrundaufträge, z. B. solche, die mit dem Cmdlet Start-Job 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.

Type:Hashtable
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters: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 instance-ID, aber sie ist nur in der aktuellen Sitzung eindeutig. Sie können eine oder mehrere IDs durch Kommas getrennt eingeben. Um die ID eines Auftrags zu ermitteln, geben Sie ein Get-Job.

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

-InstanceId

Gibt die instance IDs von Aufträgen an, die von diesem Cmdlet beendet werden. Standardmäßig werden alle Aufträge fortgesetzt.

Eine Instanz-ID ist eine GUID, die den Auftrag auf dem Computer eindeutig identifiziert. Um die Instanz-ID eines Auftrags zu ermitteln, verwenden Sie „Get-Job“.

Type:Guid[]
Position:0
Default value:All jobs
Required:True
Accept pipeline input:True
Accept wildcard characters: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 löscht Stop-Job alle Aufträge, die in der aktuellen Sitzung gestartet wurden.

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

-Name

Gibt Anzeigenamen von Aufträgen an, die von diesem Cmdlet beendet werden. Geben Sie die Auftragsnamen in eine kommagetrennte Liste ein, oder verwenden Sie Platzhalterzeichen (*), um ein Auftragsnamensmuster einzugeben. Standardmäßig beendet Stop-Job alle Aufträge, die in der aktuellen Sitzung erstellt wurden.

Da der Anzeigename nicht garantiert eindeutig ist, verwenden Sie beim Beenden von Aufträgen nach Namen die Parameter WhatIf und Confirm .

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

-PassThru

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

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-State

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

  • NotStarted
  • Wird ausgeführt
  • Abgeschlossen
  • Fehler
  • Beendet
  • Blockiert
  • Ausgesetzt
  • Getrennt
  • Wird angehalten
  • Wird beendet

Weitere Informationen zu Auftragszuständen finden Sie unter JobState Enumeration in der MSDN Library.

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

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

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Eingaben

System.Management.Automation.RemotingJob

Sie können ein Auftragsobjekt an dieses Cmdlet übergeben.

Ausgaben

None, System.Management.Automation.PSRemotingJob

Dieses Cmdlet gibt ein Auftragsobjekt zurück, wenn Sie den PassThru-Parameter angeben. Andernfalls wird von diesem Cmdlet keine Ausgabe generiert.