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