THEMA
about_Remote_Jobs
KURZBESCHREIBUNG
Beschreibt, wie Hintergrundaufträge auf Remotecomputern
ausgeführt werden.
AUSFÜHRLICHE BESCHREIBUNG
Ein Hintergrundauftrag ist ein Befehl, der asynchron und ohne
Interaktion mit der aktuellen Sitzung ausgeführt wird. Die
Eingabeaufforderung wird sofort zurückgegeben, und Sie können die
Sitzung weiterhin verwenden, während der Auftrag ausgeführt wird.
Standardmäßig werden Hintergrundaufträge auf dem lokalen Computer
ausgeführt. Sie können jedoch verschiedene Verfahren verwenden, um
Hintergrundaufträge auf Remotecomputern auszuführen.
In diesem Thema wird erläutert, wie ein Hintergrundauftrag auf
einem Remotecomputer ausgeführt wird. Informationen über das
Ausführen von Hintergrundaufträgen auf einem lokalen Computer
finden Sie unter "about_Jobs". Weitere Informationen über
Hintergrundaufträge finden Sie unter "about_Job_Details".
REMOTEHINTERGRUNDAUFTRÄGE
Sie können Hintergrundaufträge auf Remotecomputern mit drei
verschiedenen Methoden ausführen.
-- Starten Sie eine interaktive Sitzung mit einem Remotecomputer,
und starten Sie anschließend einen Auftrag in der interaktiven
Sitzung. Die Verfahren sind mit der Ausführung eines lokalen
Auftrags vergleichbar, jedoch werden alle Aktionen auf dem
Remotecomputer ausgeführt.
-- Führen Sie einen Hintergrundauftrag auf einem Remotecomputer
aus, der die Ergebnisse an den lokalen Computer zurückgibt.
Verwenden Sie diese Methode, um die Ergebnisse von
Hintergrundaufträgen zu erfassen und an einem zentralen
Speicherort auf dem lokalen Computer zu verwalten.
-- Führen Sie einen Hintergrundauftrag auf einem Remotecomputer
aus, der die Ergebnisse auf dem Remotecomputer verwaltet.
Verwenden Sie diese Methode, wenn die Verwaltung der
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 anschließend einen Hintergrundauftrag im Rahmen der
interaktiven Sitzung starten. Weitere Informationen über
interaktive Sitzungen finden Sie unter "about_Remote" und unter
"Enter-PSSession".
Das Verfahren zum Starten eines Hintergrundauftrags in einer
interaktiven Sitzung ist mit dem Verfahren zum Starten eines
Hintergrundauftrags auf dem lokalen Computer nahezu identisch.
Alle Vorgänge werden jedoch auf dem Remotecomputer, nicht auf dem
lokalen Computer ausgeführt.
SCHRITT 1: ENTER-PSSESSION
Starten Sie eine interaktive Sitzung mit einem Remotecomputer mit
dem Cmdlet "Enter-PSSession". Mit dem ComputerName-Parameter von
Enter-PSSession können Sie eine temporäre Verbindung für die
interaktive Sitzung herstellen. Sie können die interaktive
Sitzung auch mit dem Sitzungsparameter in einer Windows
PowerShell-Sitzung (PSSession) ausführen.
Mit dem folgenden Befehl wird eine interaktive Sitzung auf dem
Computer "Server01" gestartet:
C:\PS> Enter-PSSession -computername Server01
Die Eingabeaufforderung ändert sich, um anzuzeigen, dass eine
Verbindung mit dem Computer "Server01" hergestellt wurde.
Server01\C:>
SCHRITT 2: START-JOB
Starten Sie mit dem Cmdlet "Start-Job" einen Hintergrundauftrag
in der Sitzung.
Der folgende Befehl führt einen Hintergrundauftrag aus, mit dem
die Ereignisse im Windows PowerShell-Ereignisprotokoll auf dem
Computer "Server01" abgerufen werden. Das Cmdlet "Start-Job" gibt
ein Objekt zurück, das den Auftrag darstellt.
Mit diesem Befehl wird das Auftragsobjekt in der Variablen "$job"
gespeichert.
Server01\C:> $job = start-job -scriptblock {get-eventlog "Windows PowerShell"}
Während der Auftrag ausgeführt wird, können Sie weitere Befehle
einschließlich anderer Hintergrundaufträge in der interaktiven
Sitzung ausführen. Die interaktive Sitzung muss jedoch geöffnet
bleiben, bis der Auftrag abgeschlossen ist. Wenn Sie die Sitzung
beenden, wird der Auftrag unterbrochen, und die Ergebnisse werden
verworfen.
SCHRITT 3: GET-JOB
Zeigen Sie den Wert der Variablen "$job" an, oder rufen Sie den
Auftrag mit dem Cmdlet "Get-Job" ab, um herauszufinden, ob der
Auftrag abgeschlossen wurde. Der folgende Befehl zeigt den
Auftrag mit dem Cmdlet "Get-Job" an.
Server01\C:> get-job $job
SessionId Name State HasMoreData Location Command
--------- ---- ----- ----------- -------- -------
1 Job1 Complete True localhost get-eventlog "Windows PowerShell"
Die Get-Job-Ausgabe zeigt an, dass der Auftrag auf dem Computer
"localhost" ausgeführt wird, da der Auftrag auf dem gleichen
Computer gestartet wurde und ausgeführt wird (hier: "Server01").
SCHRITT 4: RECEIVE-JOB
Um die Auftragsergebnisse abzurufen, verwenden Sie das Cmdlet
"Receive-Job". Sie können die Ergebnisse in der interaktiven
Sitzung anzeigen oder in einer Datei auf dem Remotecomputer
speichern. Mit dem folgenden Befehl werden die Ergebnisse des
Auftrags in der Variablen "$job" abgerufen. Im Befehl werden die
Ergebnisse des Auftrags mit dem Umleitungsoperator (>) in der
Datei "PsLog.txt" auf dem Computer "Server01" gespeichert.
Server01\C:> receive-job $job > c:\logs\PsLog.txt
SCHRITT 5: EXIT-PSSESSION
Verwenden Sie das Cmdlet "Exit-PSSession", um die interaktive
Sitzung zu beenden. Die Eingabeaufforderung ändert sich, um
wieder die ursprüngliche Sitzung auf dem lokalen Computer anzuzeigen.
Server01\C:> Exit-PSSession
C:\PS>
SCHRITT 6: INVOKE-COMMAND GET-CONTENT
Um den Inhalt der Datei "PsLog.txt" auf dem Computer "Server01"
jederzeit anzeigen zu können, starten Sie eine weitere
interaktive Sitzung, oder führen Sie einen Remotebefehl aus.
Dieser Befehlstyp wird am besten in einer PSSession (dauerhafte
Verbindung) ausgeführt, falls Sie mehrere Befehle verwenden
möchten, um die Daten in der Datei "PsLog.txt" zu untersuchen und
zu verwalten. Weitere Informationen über PSSessions finden Sie
unter "about_PSSessions".
Die folgenden Befehle verwenden das Cmdlet "New-PSSession", um
eine PSSession zu erstellen, die mit dem Computer "Server01"
verbunden ist, und das Cmdlet "Invoke-Command" wird verwendet, um
einen Get-Content-Befehl in der PSSession auszuführen und 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 REMOTEAUFTRAGS ZUR RÜCKGABE VON ERGEBNISSEN AN DEN
LOKALEN COMPUTER (ASJOB)
Verwenden Sie den AsJob-Parameter eines Cmdlet wie Invoke-Command,
um einen Hintergrundauftrag auf einem Remotecomputer zu starten,
der die Ergebnisse des Befehls an den lokalen Computer zurückgibt.
Wenn Sie den AsJob-Parameter verwenden, wird das Auftragsobjekt
eigentlich auf dem lokalen Computer erstellt, obwohl der Auftrag
auf dem Remotecomputer ausgeführt wird. Wenn der Auftrag
abgeschlossen ist, werden die Ergebnisse an den lokalen Computer
zurückgegeben.
Mit den Cmdlets, die das Auftragssubstantiv (die Job-Cmdlets)
enthalten, können Sie alle Aufträge verwalten, die von einem
beliebigen Cmdlet erstellt wurden. Windows PowerShell-Remoting
wird von vielen Cmdlets mit AsJob-Parameter nicht verwendet. Sie
können daher auch auf Computern verwendet werden, die nicht für
Remoting konfiguriert wurden und die entsprechenden Anforderungen
nicht erfüllen.
SCHRITT 1: INVOKE-COMMAND -ASJOB
Der folgende Befehl startet mit dem AsJob-Parameter von
Invoke-Command einen Hintergrundauftrag auf dem Computer
"Server01". Der Auftrag führt einen Get-Eventlog-Befehl aus, mit
dem die Ereignisse im Systemprotokoll abgerufen werden. Mit dem
JobName-Parameter können Sie dem Auftrag einen Anzeigenamen zuweisen.
invoke-command -computername Server01 -scriptblock
{get-eventlog system} -asjob
Die Ergebnisse des Befehls entsprechen in etwa der folgenden
Beispielausgabe.
SessionId Name State HasMoreData Location Command
--------- ---- ----- ----------- -------- -------
1 Job1 Running True Server01 get-eventlog system
Wenn der AsJob-Parameter verwendet wird, gibt Invoke-Command den
gleichen Typ von Auftragsobjekt zurück, der auch von Start-Job
zurückgegeben wird. Sie können das Auftragsobjekt in einer
Variablen speichern, oder Sie können mit einem Get-Job-Befehl
einen Auftrag abrufen.
Beachten Sie, dass der Wert der Location-Eigenschaft anzeigt,
dass der Auftrag auf dem Computer "Server01" ausgeführt wurde.
SCHRITT 2: GET-JOB
Um einen mit dem AsJob-Parameter des Cmdlet "Invoke-Command"
gestarteten Auftrag zu verwalten, verwenden Sie die Job-Cmdlets.
Da sich das Auftragsobjekt, das den Remoteauftrag darstellt, auf
dem lokalen Computer befindet, ist es nicht erforderlich,
Remotebefehle zur Verwaltung des Auftrags auszuführen.
Verwenden Sie einen Get-Job-Befehl, um zu bestimmen, ob der
Auftrag abgeschlossen wurde. 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,
wird der Auftrag mit einem lokalen Get-Job-Befehl abgerufen. Die
State-Eigenschaft des Auftragsobjekts zeigt 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
Um die Auftragsergebnisse abzurufen, 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.
Im folgenden Befehl werden die Ergebnisse des Auftrags mit dem
Cmdlet "Receive-Job" abgerufen. Der Auftrag wird anhand der
Sitzungs-ID identifiziert. Anschließend werden die Auftragsergebni
sse in der Variablen "$results" gespeichert. Sie können die
Ergebnisse auch in eine Datei umleiten.
$results = receive-job -id 1
STARTEN EINES REMOTEAUFTRAGS ZUM BEIBEHALTEN DER ERGEBNISSE AUF DEM
REMOTECOMPUTER
Um einen Hintergrundauftrag auf einem Remotecomputer zu starten,
der die Befehlsergebnisse auf dem Remotecomputer beibehält,
führen Sie einen Start-Job-Befehl mit dem Cmdlet "Invoke-Command"
auf einem Remotecomputer aus. Mit dieser Methode können Sie
Hintergrundaufträge auf mehreren Computern ausführen.
Wenn Sie einen Start-Job-Befehl remote ausführen, wird das
Auftragsobjekt auf dem Remotecomputer erstellt, und die
Auftragsergebnisse werden auf dem Remotecomputer beibehalten.
Aus Sicht des Auftrags werden alle Vorgänge lokal ausgeführt.
Befehle werden nur remote ausgeführt, um einen lokalen Auftrag
auf dem Remotecomputer zu verwalten.
STEP 1: INVOKE-COMMAND START-JOB
Verwenden Sie das Cmdlet "Invoke-Command", um einen
Start-Job-Befehl auf einem Remotecomputer auszuführen.
Dieser Befehl erfordert eine PSSession (eine dauerhafte
Verbindung). Wenn Sie mit dem ComputerName-Parameter von
Invoke-Command eine temporäre Verbindung herstellen, wird der
Befehl "Invoke-Command" als abgeschlossen betrachtet, wenn das
Auftragsobjekt zurückgegeben wird. Die temporäre Verbindung wird
daraufhin geschlossen, und der Auftrag wird abgebrochen.
Im folgenden Befehl wird mit dem Cmdlet "New-PSSession" eine
PSSession erstellt, die mit dem Computer "Server01" verbunden
ist. Der Befehl speichert die PSSession in der Variablen "$s".
$s = new-pssession -computername Server01
Der nächste Befehl verwendet das Cmdlet "Invoke-Command", um
einen Start-Job-Befehl in der PSSession auszuführen. Der Befehl
"Start-Job" und der Befehl "Get-Eventlog" werden in geschweifte
Klammern eingeschlossen.
invoke-command -session $s -scriptblock {start-job
-scriptblock {get-eventlog system}}
Die Ergebnisse entsprechen in etwa der folgenden Beispielausgabe:
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
2 Job2 Running True Localhost get-eventlog system
Wenn Sie einen Start-Job-Befehl remote ausführen, gibt
Invoke-Command den gleichen Auftragsobjekttyp zurück, der von
Start-Job zurückgegeben wird. Sie können das Auftragsobjekt in
einer Variablen speichern, oder Sie können mit einem
Get-Job-Befehl einen Auftrag abrufen.
Beachten Sie, dass der Wert der Location-Eigenschaft anzeigt,
dass der Auftrag auf dem lokalen Computer "LocalHost" ausgeführt
wurde, obwohl der Auftrag auf dem Computer "Server01" ausgeführt
wurde. Da das Auftragsobjekt auf dem Computer "Server01" erstellt
und der Auftrag auf dem gleichen Computer ausgeführt wird, wird
der Auftrag als lokaler Hintergrundauftrag angesehen.
STEP 2: INVOKE-COMMAND GET-JOB
Um einen Remotehintergrundauftrag zu verwalten, verwenden Sie die
Job-Cmdlets. Da sich das Auftragsobjekt auf dem Remotecomputer
befindet, müssen Sie Remotebefehle ausführen, um die
Auftragsergebnisse abzurufen, zu beenden oder darauf zu warten.
Um zu sehen, ob der Auftrag abgeschlossen wurde, verwenden Sie
einen Invoke-Command-Befehl zur Ausführung eines Get-Job-Befehls
in der PSSession, die mit dem Computer "Server01" verbunden ist.
invoke-command -session $s -scriptblock {get-job}
Der Befehl gibt ein Auftragsobjekt zurück. Die State-Eigenschaft
des Auftragsobjekts zeigt an, dass der Befehl erfolgreich
ausgeführt wurde.
SessionId Name State HasMoreData Location Command
--------- ---- ----- ----------- -------- -------
2 Job2 Completed True LocalHost get-eventlog system
STEP 3: INVOKE-COMMAND RECEIVE-JOB
Um die Ergebnisse des Auftrags abzurufen, verwenden Sie das
Cmdlet "Invoke-Command", und führen Sie einen Receive-Job-Befehl
in der PSSession aus, die mit dem Computer "Server01" verbunden ist.
Im folgenden Befehl werden die Ergebnisse des Auftrags mit dem
Cmdlet "Receive-Job" abgerufen. Der Auftrag wird anhand der
Sitzungs-ID identifiziert. Anschließend werden die Auftragsergebni
sse in der Variablen "$results" gespeichert. Mit dem
Keep-Parameter von Receive-Job wird das Ergebnis auf dem
Remotecomputer im Auftragscache beibehalten.
$results = invoke-command -session $s -scriptblock {receive-job -sessionid 2 -keep}
Sie können die Ergebnisse auch in eine Datei auf dem lokalen
Computer oder auf dem Remotecomputer umleiten. Der folgende
Befehl speichert die Ergebnisse mit einem Umleitungsoperator in
einer Datei auf dem Computer "Server01".
invoke-command -session $s -command {receive-job -sessionid 2 > c:\logs\pslog.txt}
SIEHE AUCH
about_Jobs
about_Job_Details
about_Remote
Invoke-Command
Start-Job
Get-Job
Wait-Job
Stop-Job
Remove-Job
New-PSSession
Enter-PSSession
Exit-PSSession