Freigeben über


Hintergrundaufträge

Cmdlets können ihre Aktion intern oder als Windows PowerShell-Hintergrundauftragausführen. Wenn ein Cmdlet als Hintergrundauftrag ausgeführt wird, erfolgt die Arbeit asynchron in einem eigenen Thread getrennt vom Pipelinethread, den das Cmdlet verwendet. Wenn ein Cmdlet als Hintergrundauftrag ausgeführt wird, wird die Eingabeaufforderung aus Der Benutzerperspektive sofort zurückgegeben, auch wenn der Auftrag eine längere Zeit in Anspruch nimmt, und der Benutzer kann während der Ausführung des Auftrags ohne Unterbrechung fortfahren.

Hintergrundaufträge, untergeordnete Aufträge und das Auftrags-Repository

Das Auftragsobjekt, das von den Cmdlets zurückgegeben wird, die Hintergrundaufträge unterstützen, definiert den Auftrag. (Das cmdlet Startauftrag gibt auch ein Auftragsobjekt zurück.) Der Name des Auftrags, ein Bezeichner, der zum Angeben des Auftrags, der Statusinformationen und der untergeordneten Aufträge verwendet wird, sind in dieser Definition enthalten. Der Auftrag führt keines der Arbeiten aus. Jeder Hintergrundauftrag verfügt über mindestens einen untergeordneten Job, da der untergeordnete Auftrag die eigentliche Arbeit ausführt. Wenn Sie ein Cmdlet ausführen, damit die Arbeit als Hintergrundauftrag ausgeführt wird, muss das Cmdlet den Auftrag und die untergeordneten Aufträge zu einem gemeinsamen Repository hinzufügen, das als Auftrags-Repositorybezeichnet wird.

Weitere Informationen dazu, wie Hintergrundaufträge in der Befehlszeile behandelt werden, finden Sie in den folgenden Themen:

Schreiben eines Cmdlets, das als Hintergrundauftrag ausgeführt wird

Um ein Cmdlet zu schreiben, das als Hintergrundauftrag ausgeführt werden kann, müssen Sie die folgenden Aufgaben ausführen:

  • Definieren Sie einen asJob Switch-Parameter, damit der Benutzer entscheiden kann, ob das Cmdlet als Hintergrundauftrag ausgeführt werden soll.

  • Erstellen Sie ein Objekt, das von der System.Management.Automation.Job Klasse abgeleitet ist. Dieses Objekt kann ein benutzerdefiniertes Auftragsobjekt oder ein Auftragsobjekt sein, das von Windows PowerShell bereitgestellt wird, z. B. ein System.Management.Automation.PSEventJob-Objekt.

  • Fügen Sie in einer Datensatzverarbeitungsmethode eine if-Anweisung hinzu, die erkennt, ob das Cmdlet als Hintergrundauftrag ausgeführt werden soll.

  • Implementieren Sie für benutzerdefinierte Auftragsobjekte die Auftragsklasse.

  • Gibt die entsprechenden Objekte zurück, je nachdem, ob das Cmdlet als Hintergrundauftrag ausgeführt wird.

Ein Codebeispiel finden Sie unter How to Support Jobs.

Die folgenden APIs werden von Windows PowerShell bereitgestellt, um Hintergrundaufträge zu verwalten.

System.Management.Automation.Job Leitet benutzerdefinierte Auftragsobjekte ab. Dies ist eine abstrakte Klasse.

System.Management.Automation.JobRepository Verwaltet und stellt Informationen zu den aktuellen aktiven Hintergrundaufträgen bereit.

System.Management.Automation.JobState Definiert den Status des Hintergrundauftrags. Zu den Zuständen gehören "Started", "Running" und "Stopped".

System.Management.Automation.JobStateInfo Stellt Informationen zum Status eines Hintergrundauftrags bereit, und wenn die letzte Zustandsänderung durch einen Fehler verursacht wurde, hat der Auftrag den aktuellen Zustand eingegeben.

System.Management.Automation.JobStateEventArgs Stellt die Argumente für ein Ereignis bereit, das ausgelöst wird, wenn sich ein Hintergrundauftrag ändert.

Windows PowerShell-Auftrags-Cmdlets

Die folgenden Cmdlets werden von Windows PowerShell zum Verwalten von Hintergrundaufträgen bereitgestellt.

Get-Job

Ruft Windows PowerShell-Hintergrundaufträge ab, die in der aktuellen Sitzung ausgeführt werden.

Receive-Job

Ruft die Ergebnisse der Windows PowerShell-Hintergrundaufträge in der aktuellen Sitzung ab.

Remove-Job

Löscht einen Windows PowerShell-Hintergrundauftrag.

Start-Job

Startet einen Windows PowerShell-Hintergrundauftrag.

Stop-Job

Beendet einen Windows PowerShell-Hintergrundauftrag.

Wait-Job

Unterdrückt die Eingabeaufforderung, bis eine oder alle Windows PowerShell-Hintergrundaufträge, die in der Sitzung ausgeführt werden, abgeschlossen sind.

Siehe auch

Schreiben eines Windows PowerShell-Cmdlets