Freigeben über


about_Remote_Jobs

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