about_Remote_Jobs

Letzte Aktualisierung: Mai 2014

Betrifft: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

THEMA

about_Remote_Jobs

KURZE BESCHREIBUNG

Beschreibt, wie Hintergrundaufträge auf Remotecomputern ausgeführt werden.

AUSFÜHRLICHE BESCHREIBUNG

Ein Hintergrundauftrag ist ein Befehl, der asynchron, ohne Interaktion mit der aktuellen Sitzung, ausgeführt wird. Die Befehlszeile wird sofort wieder angezeigt, so dass Sie die Sitzung auch während der Ausführung des Auftrags verwenden können.

Hintergrundaufträge werden standardmäßig auf dem lokalen Computer ausgeführt. Mit verschiedenen Verfahren können Sie Hintergrundaufträge jedoch auch auf Remotecomputern ausführen.

In diesem Abschnitt wird erläutert, wie ein Hintergrundauftrag auf einem Remotecomputer ausgeführt wird. Informationen zur Ausführung von Hintergrundaufträgen auf lokalen Computern finden Sie unter "about_Jobs". Weitere Informationen zu Hintergrundaufträgen finden Sie unter "about_Job_Details".

REMOTE-AUSFÜHRUNG VON HINTERGRUNDAUFTRÄGEN

Auf Remotecomputern können Sie Hintergrundaufträge mit drei verschiedenen Methoden ausführen.

– Starten Sie eine interaktive Sitzung mit einem Remotecomputer und starten Sie dann innerhalb der interaktiven Sitzung einen Auftrag. Sie gehen dabei vor wie bei der Ausführung eines lokalen Auftrags, auch wenn alle Aktionen auf dem Remotecomputer ausgeführt werden.

– Führen Sie einen Hintergrundauftrag auf einem Remotecomputer aus, wobei die Ergebnisse an den lokalen Computer zurückgegeben werden. Diese Methode empfiehlt sich, wenn Sie die Ergebnisse von Hintergrundaufträgen erfassen und an einem zentralen Speicherort auf dem lokalen Computer verwalten möchten.

– Führen Sie einen Hintergrundauftrag auf einem Remotecomputer aus, wobei die Ergebnisse auf dem Remotecomputer gespeichert werden. Diese Methode empfiehlt sich, wenn der Speicherort für die Auftragsdaten auf dem ursprünglichen Computer sicherer ist.

STARTEN EINES HINTERGRUNDAUFTRAGS IN EINER INTERAKTIVEN SITZUNG

Sie können eine interaktive Sitzung mit einem Remotecomputer starten und in dieser interaktiven Sitzung einen Hintergrundauftrag starten. Weitere Informationen zu interaktiven Sitzungen finden Sie unter "about_Remote" und "Enter-PSSession".

Das Verfahren zum Starten eines Hintergrundauftrags in einer interaktiven Sitzung ist nahezu identisch mit dem Verfahren zum Starten eines Hintergrundauftrags auf dem lokalen Computer. Einzig die Vorgänge finden auf dem Remotecomputer und nicht auf den lokalen Computer statt.

SCHRITT 1: ENTER-PSSESSION

Zum Starten einer interaktiven Sitzung mit einem Remotecomputer verwenden Sie das Cmdlet Enter-PSSession. Mit dem Parameter ComputerName von Enter-PSSession können Sie eine temporäre Verbindung für die interaktive Sitzung herstellen. Alternativ können Sie die interaktive Sitzung mit dem Parameter Session in einer Windows PowerShell®-Sitzung (PSSession) ausführen.

Der folgende Befehl startet eine interaktive Sitzung auf Computer "Server01".

        C:\PS> Enter-PSSession -computername Server01

Die Befehlszeile zeigt nun an, dass Sie mit Computer "Server01" verbunden sind.

        Server01\C:>

SCHRITT 2: START-JOB

Zum Starten des Hintergrundauftrags in der Sitzung verwenden Sie das Cmdlet Start-Job.

Der folgende Befehl führt einen Hintergrundauftrag aus, der die Ereignisse aus dem Ereignisprotokoll von Windows PowerShell von Computer "Server01" abruft. Das Cmdlet Start-Job gibt ein Objekt zurück, das diesen Auftrag darstellt.

Der Befehl speichert das Auftragsobjekt in der Variablen $job.

        Server01\C:> $job = start-job -scriptblock {get-eventlog "Windows PowerShell"}

Während der Auftrag ausgeführt wird, können Sie die interaktive Sitzung zur Ausführung anderer Befehle, einschließlich weiterer Hintergrundaufträge, verwenden. Die interaktive Sitzung muss jedoch so lange geöffnet bleiben, bis der Auftrag abgeschlossen ist. Wenn Sie die Sitzung verfrüht beenden, wird der Auftrag abgebrochen und die Ergebnisse gehen verloren.

SCHRITT 3: GET-JOB

Um herauszufinden, ob der Auftrag abgeschlossen ist, zeigen Sie den Wert der Variablen $job an oder rufen Sie den Auftrag mit dem Cmdlet Get-Job ab. Der folgende Befehl verwendet das Cmdlet Get-Job zum Anzeigen des Auftrags.

        Server01\C:> get-job $job

        SessionId  Name  State      HasMoreData  Location   Command
        ---------  ----  -----      -----------  --------   -------
        1          Job1  Complete   True         localhost  get-eventlog "Windows PowerShell"

Die Ausgabe von Get-Job zeigt, dass der Auftrag auf Computer "localhost" ausgeführt wird, da der Auftrag auf demselben Computer (in diesem Fall Server01) gestartet wurde und ausgeführt wird.

SCHRITT 4: RECEIVE-JOB

Zum Abrufen der Auftragsergebnisse verwenden Sie das Cmdlet Receive-Job. Sie können die Ergebnisse in der interaktiven Sitzung anzeigen oder in einer Datei auf dem Remotecomputer speichern. Der folgende Befehl ruft die Ergebnisse des Auftrags in der Variablen $job ab. Der Befehl verwendet den Umleitungsoperator (>) zum Speichern der Auftragsergebnisse in der Datei PsLog.txt auf Computer "Server01".

        Server01\C:> receive-job $job > c:\logs\PsLog.txt

SCHRITT 5: EXIT-PSSESSION

Zum Beenden der interaktiven Sitzung verwenden Sie das Cmdlet Exit-PSSession. Die Befehlszeile zeigt nun an, dass Sie sich wieder in der ursprünglichen Sitzung auf dem lokalen Computer befinden.

        Server01\C:> Exit-PSSession
        C:\PS>

SCHRITT 6: INVOKE-COMMAND: GET-CONTENT

Den Inhalt der Datei PsLog.txt auf Computer "Server01" können Sie jederzeit anzeigen, indem Sie eine weitere interaktive Sitzung starten oder einen Remotebefehl ausführen. Diese Art von Befehl führen Sie für den Fall, dass Sie die Daten der Datei PsLog.txt mit mehreren Befehlen untersuchen und verwalten möchten, am besten in einer PSSession (persistente Verbindung) aus. Weitere Informationen zu PSSessions finden Sie unter "about_PSSessions".

Die folgenden Befehle verwenden das Cmdlet New-PSSession zur Erstellung einer PSSession, die mit Computer "Server01" verbunden ist. Außerdem verwenden sie das Cmdlet Invoke-Command zur Ausführung eines Get-Content-Befehls in der PSSession, um den Inhalt der Datei anzuzeigen.

        C:\PS> $s = new-pssession -computername Server01
        C:\PS> invoke-command -session $s -scriptblock {get-content c:\logs\pslog.txt}

STARTEN EINES REMOTE-AUFTRAGS MIT RÜCKGABE DER ERGEBNISSE AN DEN LOKALEN COMPUTER (ASJOB)

Zum Starten eines Hintergrundauftrags auf einem Remotecomputer, der die Befehlsergebnisse an den lokalen Computer zurückgibt, verwenden Sie den Parameter AsJob eines Cmdlets wie z. B. des Cmdlets Invoke-Command.

Bei Angabe des Parameters AsJob wird das Auftragsobjekt trotz Ausführung des Auftrags auf dem Remotecomputer tatsächlich auf dem lokalen Computer erstellt. Nach Abschluss des Auftrags werden die Ergebnisse an den lokalen Computer zurückgegeben.

Mit den Cmdlets, die das Substantiv "Job" enthalten (die Job-Cmdlets), können Sie jeden Auftrag verwalten, unabhängig von welchem Cmdlet er erstellt wurde. Viele Cmdlets, die den AsJob-Parameter unterstützen, verwenden die Fernzugriffsfunktion von Windows PowerShell nicht. Sie können diese Cmdlets daher auch auf Computern verwenden, die nicht für den Fernzugriff konfiguriert sind und die die hierfür erforderlichen Anforderungen nicht erfüllen.

SCHRITT 1: INVOKE-COMMAND -ASJOB

Der folgende Befehl verwendet den Parameter AsJob von Invoke-Command zum Starten eines Hintergrundauftrags auf Computer "Server01". Der Auftrag führt einen Get-Eventlog-Befehl aus, der die Ereignisse im Systemprotokoll abruft. Mit dem Parameter JobName können Sie dem Auftrag einen Anzeigenamen zuweisen.

       invoke-command -computername Server01 -scriptblock {get-eventlog system} -asjob  

Das Befehlsergebnis sieht der folgenden Beispielausgabe ähnlich.

       SessionId   Name    State      HasMoreData     Location   Command
       ---------   ----    -----      -----------     --------   -------
       1           Job1    Running    True            Server01   get-eventlog system

Bei Verwendung des Parameters AsJob gibt Invoke-Command die gleiche Art von Auftragsobjekt zurück wie das Cmdlet Start-Job. Sie können das Auftragsobjekt in einer Variablen speichern oder den Auftrag mit dem Befehl Get-Job abrufen.

Beachten Sie, dass der Wert der Eigenschaft Location anzeigt, dass der Auftrag auf Computer "Server01" ausgeführt wurde.

SCHRITT 2: GET-JOB

Zur Verwaltung eines Auftrags, der mit dem Parameter AsJob des Cmdlets Invoke-Command gestartet wurde, verwenden Sie die Job-Cmdlets. Da sich das Auftragsobjekt, das den Remoteauftrag darstellt, auf dem lokalen Computer befindet, brauchen Sie zur Verwaltung des Auftrags keine Remotebefehle auszuführen.

Um festzustellen, ob der Auftrag abgeschlossen ist, verwenden Sie den Befehl Get-Job. Der folgende Befehl ruft alle Aufträge ab, die in der aktuellen Sitzung gestartet wurden.

        get-job

Da der Remoteauftrag in der aktuellen Sitzung gestartet wurde, kann der Auftrag auch durch einen lokalen Get-Job-Befehl abgerufen werden. Die Eigenschaft State des Auftragsobjekts gibt an, dass der Befehl erfolgreich ausgeführt wurde.

       SessionId   Name   State      HasMoreData     Location   Command
       ---------   ----   -----      -----------     --------   -------
       1           Job1   Completed  True            Server01   get-eventlog system

SCHRITT 3: RECEIVE-JOB

Zum Abrufen der Auftragsergebnisse verwenden Sie das Cmdlet Receive-Job. Da die Auftragsergebnisse automatisch an den Computer zurückgegeben werden, auf dem sich das Auftragsobjekt befindet, können Sie die Ergebnisse mit einem lokalen Receive-Job-Befehl abrufen.

Der folgende Befehl ruft die Auftragsergebnisse mit dem Cmdlet Receive-Job ab. Er identifiziert den Auftrag mit der Sitzungs-ID. Anschließend speichert der Befehl die Auftragsergebnisse in der Variablen $results. Sie können die Ergebnisse auch in eine Datei umleiten.

       $results = receive-job -id 1

STARTEN EINES REMOTE-AUFTRAGS MIT SPEICHERN DER ERGEBNISSE AUF DEM REMOTE-COMPUTER

Zum Starten eines Hintergrundauftrags auf einem Remotecomputer und Speichern der Befehlsergebnisse auf diesem Computer verwenden Sie das Cmdlet Invoke-Command, um den Befehl Start-Job auf dem Remotecomputer auszuführen. Mit dieser Methode können Sie Hintergrundaufträge auf mehreren Computern ausführen.

Bei der Remoteausführung eines Start-Job-Befehls wird das Auftragsobjekt auf dem Remotecomputer erstellt und die Auftragsergebnisse werden auf diesem Remotecomputer gespeichert. Aus der Perspektive des Auftrags erfolgen jedoch alle Vorgänge lokal. Sie führen lediglich Remotebefehle aus, um einen lokalen Auftrag auf einem Remotecomputer zu verwalten.

SCHRITT 1: INVOKE-COMMAND START-JOB

Zum Ausführen eines Start-Job-Befehls auf einem Remotecomputer verwenden Sie das Cmdlet Invoke-Command.

Dieser Befehl erfordert eine PSSession (persistente Verbindung). Wenn Sie den Parameter ComputerName von Invoke-Command zum Aufbau einer temporären Verbindung verwenden, gilt der Befehl Invoke-Command mit der Rückgabe des Auftragsobjekts als abgeschlossen. Demzufolge wird die temporäre Verbindung geschlossen und der Auftrag abgebrochen.

Der folgende Befehl verwendet das Cmdlet New-PSSession zur Erstellung einer PSSession, die mit Computer "Server01" verbunden ist. Der Befehl speichert die PSSession in der $s-Variablen.

        $s = new-pssession -computername Server01

Der nächste Befehl verwendet das Cmdlet Invoke-Command zum Ausführen eines Start-Job-Befehls in der PSSession. Die Befehle Start-Job und Get-Eventlog sind in geschweiften Klammern eingeschlossen.

       invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog system}}

Das Ergebnis sieht der folgenden Beispielausgabe ähnlich.

       Id       Name    State      HasMoreData     Location   Command
       --       ----    -----      -----------     --------   -------
       2        Job2    Running    True            Localhost  get-eventlog system

Bei der Remoteausführung eines Start-Job-Befehls gibt Invoke-Command die gleiche Art von Auftragsobjekt zurück wie Start-Job. Sie können das Auftragsobjekt in einer Variablen speichern oder den Auftrag mit dem Befehl Get-Job abrufen.

Beachten Sie, dass der Wert der Eigenschaft Location anzeigt, dass der Auftrag auf dem lokalen Computer (LocalHost) ausgeführt wurde, obwohl die Ausführung tatsächlich auf Computer "Server01" erfolgt ist. Da das Auftragsobjekt auf Computer "Server01" erstellt und der Auftrag auf dem gleichen Computer ausgeführt wurde, wird er als lokaler Hintergrundauftrag betrachtet.

SCHRITT 2: INVOKE-COMMAND GET-JOB

Zur Verwaltung remoter Hintergrundaufträge verwenden Sie die Job-Cmdlets. Da sich das Auftragsobjekt auf dem Remotecomputer befindet, müssen Sie zum Abrufen, Beenden und Warten auf Auftragsergebnisse Remotebefehle verwenden.

Um festzustellen, ob der Auftrag abgeschlossen ist, verwenden Sie das Cmdlet Invoke-Command zur Ausführung eines Get-Job-Befehls in der PSSession, die mit Computer "Server01" verbunden ist.

        invoke-command -session $s -scriptblock {get-job}

Der Befehl gibt ein Auftragsobjekt zurück. Die Eigenschaft State des Auftragsobjekts gibt an, dass der Befehl erfolgreich ausgeführt wurde.

       SessionId       Name    State      HasMoreData     Location   Command
       ---------       ----    -----      -----------     --------   -------
       2               Job2    Completed  True            LocalHost   get-eventlog system

SCHRITT 3: INVOKE-COMMAND RECEIVE-JOB

Zum Abrufen der Auftragsergebnisse verwenden Sie das Cmdlet Invoke-Command zur Ausführung eines Receive-Job-Befehls in der PSSession, die mit Computer "Server01" verbunden ist.

Der folgende Befehl ruft die Auftragsergebnisse mit dem Cmdlet Receive-Job ab. Er identifiziert den Auftrag mit der Sitzungs-ID. Anschließend speichert der Befehl die Auftragsergebnisse in der Variablen $results. Es verwendet den Parameter Keep des Cmdlets Receive-Job, damit das Ergebnis im Auftragscache auf dem Remotecomputer gespeichert wird.

        $results = invoke-command -session $s -scriptblock {receive-job -sessionid 2 -keep}

Sie können die Ergebnisse auch in eine Datei auf dem lokalen oder dem Remotecomputer umleiten. Der folgende Befehl verwendet einen Umleitungsoperator, um die Ergebnisse in einer Datei auf Computer "Server01" zu speichern.

        invoke-command -session $s -command {receive-job -sessionid 2 > c:\logs\pslog.txt}

SIEHE AUCH

about_Jobs

about_Job_Details

about_Remote

about_Remote_Variables

Invoke-Command

Start-Job

Get-Job

Wait-Job

Stop-Job

Remove-Job

New-PSSession

Enter-PSSession

Exit-PSSession