THEMA
    about_Jobs

KURZBESCHREIBUNG
    Enthält Informationen zur Hintergrundausführung von Befehlen oder 
    Ausdrücken durch Windows PowerShell-Hintergrundaufträge, ohne mit 
    der aktuellen Sitzung zu interagieren. 

DETAILBESCHREIBUNG
    In diesem Thema wird erklärt, wie Hintergrundaufträge in Windows 
    PowerShell auf einem lokalen Computer ausgeführt werden. Weitere 
    Informationen zum Ausführen von Hintergrundaufträgen auf 
    Remotecomputern finden Sie unter "about_Remote_Jobs". 
    
    Wenn Sie einen Hintergrundauftrag starten, kann die 
    Eingabeaufforderung auch dann sofort wieder verwendet werden, 
    wenn die Ausführung des Auftrags mehr Zeit in Anspruch nimmt. 
    Während der Auftrag ausgeführt wird, können Sie weiterhin ohne 
    Unterbrechung in der Sitzung arbeiten. 

    Wichtig: Für Hintergrundaufträge, die mit Start-Job oder dem 
    	     AsJob-Parameter von Invoke-Command gestartet werden, ist die 
    	     Windows PowerShell-Remotinginfrastruktur erforderlich. Diese 
    	     Features können Sie nur verwenden, wenn Windows PowerShell für 
    	     Remoting konfiguriert wurde. Dies gilt auch dann, wenn der 
    	     Hintergrundauftrag lediglich auf dem lokalen Computer ausgeführt 
    	     wird. Weitere Informationen finden Sie unter "about_Remote_Require
    	     ments".

 
        
 SO STARTEN SIE EINEN AUFTRAG AUF DEM LOKALEN COMPUTER
    Verwenden Sie das Cmdlet "Start-Job", um einen Hintergrundauftrag 
    auf dem lokalen Computer zu starten. 

    Wenn Sie den Befehl "Start-Job" erstellen, schließen Sie den 
    Befehl, mit dem der Auftrag ausgeführt wird, in geschweifte 
    Klammern ({}) ein. Geben Sie den Befehl im ScriptBlock-Parameter an.

    Mit dem folgenden Befehl wird ein Hintergrundauftrag gestartet, 
    mit dem auf dem lokalen Computer der Befehl "Get-Process" 
    ausgeführt wird.

        start-job -scriptblock {get-process}


    Der Befehl "Start-Job" gibt ein Objekt zurück, das den Auftrag 
    darstellt. Das Auftragsobjekt enthält nützliche Informationen 
    über den Auftrag, jedoch keine Auftragsergebnisse.
    
    Speichern Sie das Auftragsobjekt in einer Variablen, und 
    verwenden Sie diese dann in den anderen Job-Cmdlets, um den 
    Hintergrundauftrag zu verwalten. Mit dem folgenden Befehl wird ein 
    Auftragsobjekt gestartet und das resultierende Auftragsobjekt in der 
    Variablen "$job" gespeichert.

        $job = start-job -scriptblock {get-process} 

    Mit dem Cmdlet "Get-Job" können Sie auch die Objekte abrufen, die 
    die in der aktuellen Sitzung gestarteten Aufträge darstellen. 
    Get-Job gibt dasselbe Auftragsobjekt wie Start-Job zurück.

 
 ABRUFEN VON AUFTRAGSOBJEKTEN

    Zum Abrufen der Objekte, die die in der aktuellen Sitzung 
    gestarteten Hintergrundaufträge darstellen, verwenden Sie das 
    Cmdlet "Get-Job". Ohne Parameter gibt Get-Job alle Aufträge 
    zurück, die in der aktuellen Sitzung gestartet wurden.

    Mit dem folgenden Befehl rufen Sie z. B. die Aufträge in der 
    aktuellen Sitzung ab.

	get-job


        Id  Name  State      HasMoreData  Location   Command
        --  ----  -----      -----------  --------   -------
        1   Job1  Running    True         localhost  get-process


    Sie können auch das Auftragsobjekt in einer Variablen speichern 
    und diese verwenden, um den Auftrag in einem späteren Befehl 
    darzustellen. Mit dem folgenden Befehl wird der Auftrag mit der 
    ID "1" abgerufen und in der Variablen "$job" gespeichert.

       $job = get-job -id 1 


    Das Auftragsobjekt enthält den Status des Auftrags, der angibt, 
    ob der Auftrag beendet wurde. Ein abgeschlossener Auftrag besitzt 
    den Status "Complete" oder "Failed". Ein Auftrag kann auch 
    blockiert oder ausgeführt werden.


	get-job


        Id  Name  State      HasMoreData  Location   Command
        --  ----  -----      -----------  --------   -------
        1   Job1  Complete   True         localhost  get-process



 ABRUFEN VON AUFTRAGSERGEBNISSEN

    Beim Ausführen eines Hintergrundauftrags werden die Ergebnisse 
    nicht sofort angezeigt. Stattdessen gibt das Cmdlet "Start-Job" 
    ein Auftragsobjekt zurück, das den Auftrag darstellt, jedoch 
    keine Ergebnisse enthält. Um die Ergebnisse eines Hintergrundauftr
    ags abzurufen, verwenden Sie das Cmdlet "Receive-Job".

    Im folgenden Befehl werden die Ergebnisse des Auftrags mit dem 
    Cmdlet "Receive-Job" abgerufen. Dabei wird zum Bezeichnen des 
    Auftrags ein in der Variablen "$job" gespeichertes Auftragsobjekt 
    verwendet.

	receive-job -job $job

     Das Cmdlet "Receive-Job" gibt die Ergebnisse des Auftrags zurück. 


           Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)    Id ProcessName
           -------  ------    -----      ----- -----   ------    -- -----------
               103       4    11328       9692    56           1176 audiodg
               804      14    12228      14108   100   101.74  1740 CcmExec
               668       7     2672       6168   104    32.26   488 csrss
	   ...

     Sie können auch die Ergebnisse eines Auftrags in einer Variablen 
     speichern. Im folgenden Befehl werden die Ergebnisse des 
     Auftrags in der Variablen "$job" in der Variablen "$results" 
     gespeichert.

	$results = receive-job -job $job

     Sie können zudem die Ergebnisse des Auftrags in einer Datei 
     speichern, indem Sie den Umleitungsoperator (>) oder das Cmdlet 
     "Out-File" verwenden. Im folgenden Befehl wird der 
     Umleitungsoperator zum Speichern der Ergebnisse des Auftrags in 
     der Variablen "$job" in der Datei "Ergebnisse.txt" verwendet.


        receive-job -job $job > Ergebnisse.txt


    

 ABRUFEN UND BEIBEHALTEN PARTIELLER AUFTRAGSERGEBNISSE

    Das Cmdlet "Receive-Job" gibt die Ergebnisse eines Hintergrundauft
    rags zurück. Wenn der Auftrag abgeschlossen ist, gibt Receive-Job 
    die vollständigen Ergebnisse des Auftrags zurück. Wenn der 
    Auftrag noch immer ausgeführt wird, werden mit Receive-Job die 
    bis dahin generierten Ergebnisse abgerufen. Sie können 
    Receive-Job-Befehle erneut ausführen, um die verbleibenden 
    Ergebnisse abzurufen.

    Wenn Receive-Job Ergebnisse zurückgibt, werden standardmäßig die 
    Ergebnisse in dem Cache gelöscht, in dem die Auftragsergebnisse 
    gespeichert werden. Wenn Sie einen anderen Receive-Job-Befehl 
    ausführen, rufen Sie nur die Ergebnisse ab, die noch nicht 
    empfangen wurden.

    Mit den folgenden Befehlen werden die Ergebnisse der Ausführung 
    von Receive-Job-Befehlen angezeigt, bevor der Auftrag 
    abgeschlossen ist.


	C:\PS> receive-job -job $job

        Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
        -------  ------    -----      ----- -----   ------     -- -----------
            103       4    11328       9692    56            1176 audiodg
            804      14    12228      14108   100   101.74   1740 CcmExec


	C:\PS> receive-job -job $job

        Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
        -------  ------    -----      ----- -----   ------     -- -----------
             68       3     2632        664    29     0.36   1388 ccmsetup
            749      22    21468      19940   203   122.13   3644 communicator
            905       7     2980       2628    34   197.97    424 csrss
           1121      25    28408      32940   174   430.14   3048 explorer


    Um zu verhindern, dass die zurückgegebenen Auftragsergebnisse von 
    Receive-Job gelöscht werden, verwenden Sie den Keep-Parameter. In 
    diesem Fall gibt Receive-Job alle Ergebnisse zurück, die bis zu 
    diesem Zeitpunkt generiert wurden.

    Die folgenden Befehle zeigen veranschaulichen die Auswirkungen, 
    wenn der Keep-Parameter für einen Auftrag verwendet wird, der 
    noch nicht abgeschlossen wurde. 

	C:\PS> receive-job -job $job -keep

        Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
        -------  ------    -----      ----- -----   ------     -- -----------
            103       4    11328       9692    56            1176 audiodg
            804      14    12228      14108   100   101.74   1740 CcmExec


	C:\PS> receive-job -job $job -keep

        Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
        -------  ------    -----      ----- -----   ------     -- -----------
            103       4    11328       9692    56            1176 audiodg
            804      14    12228      14108   100   101.74   1740 CcmExec
             68       3     2632        664    29     0.36   1388 ccmsetup
            749      22    21468      19940   203   122.13   3644 communicator
            905       7     2980       2628    34   197.97    424 csrss
           1121      25    28408      32940   174   430.14   3048 explorer


    
WARTEN AUF ERGEBNISSE

    Wenn Sie einen Befehl ausführen, für dessen Abschluss längere 
    Zeit benötigt wird, können Sie anhand der Eigenschaften des 
    Auftragsobjekts ermitteln, wann der Auftrag abgeschlossen wird. 
    Im folgenden Befehl verwenden Sie das Get-Job-Objekt, um alle 
    Hintergrundaufträge in der aktuellen Sitzung abzurufen.

	get-job

    Die Ergebnisse werden in einer Tabelle angezeigt. Der Status des 
    Auftrags wird in der Statusspalte angezeigt.

        Id  Name  State      HasMoreData  Location   Command
        --  ----  -----      -----------  --------   -------
        1   Job1  Complete   True         localhost  get-process
        2   Job2  Running    True         localhost  get-eventlog -log syst...
        3   Job3  Complete   True         localhost  dir -path c:\* -recurse


    In diesem Fall zeigt die State-Eigenschaft, dass Auftrag 2 immer noch 
    ausgeführt wird. Wenn Sie das Cmdlet "Receive-Job" verwenden, um die 
    Auftragsergebnisse jetzt abzurufen, sind die Ergebnisse 
    unvollständig. Mit dem Cmdlet "Receive-Job" können Sie alle 
    Ergebnisse beliebig oft abrufen. Bei der ersten Verwendung erhalten 
    Sie standardmäßig nur die Ergebnisse, die nicht bereits empfangen 
    wurden, doch können Sie die Ergebnisse mit dem Keep-Parameter des 
    Cmdlets "Receive-Job" beibehalten, auch wenn sie bereits empfangen wurden.

    Zu diesem Zeitpunkt können Sie die Ergebnisse in eine Datei 
    schreiben und die später empfangenen Ergebnisse dann jeweils 
    anfügen. Sie können auch warten und den Status des Auftrags 
    später überprüfen.

    Zudem können Sie mit dem Cmdlet "Wait-Job" auf beliebige oder 
    alle Ergebnisse des Auftrags zu warten. Mit Wait-Job können Sie 
    auf den Abschluss eines bestimmten Auftrags, aller Aufträge oder 
    beliebiger Aufträge warten.
  
    Im folgenden Befehl wird das Cmdlet "Wait-Job" verwendet, um auf 
    einen Auftrag mit der ID "10" zu warten.

	wait-job -ID 10

    Daher wird die Windows PowerShell-Eingabeaufforderung 
    unterdrückt, bis der Auftrag abgeschlossen wurde.

    Sie können das Warten auch auf einen bestimmten Zeitraum 
    festlegen. In diesem Befehl wird das Warten mit dem 
    Timeout-Parameter auf 120 Sekunden beschränkt. Nach Ablauf dieser 
    Zeit kann die Eingabeaufforderung wieder verwendet werden, aber 
    der Auftrag wird im Hintergrund weiter ausgeführt.

	wait-job -ID 10 -timeout 120


BEENDEN VON AUFTRÄGEN

    Zum Beenden eines Hintergrundauftrags verwenden Sie das Cmdlet 
    "Stop-Job". Mit dem folgenden Befehl wird ein Auftrag gestartet, 
    um jeden Eintrag im Systemereignisprotokoll abzurufen. Dabei wird das 
    Auftragsobjekt in der Variablen "$job" gespeichert.

	$job = start-job -scriptblock {get-eventlog -log system} 

    Mit dem folgenden Befehl wird der Auftrag beendet. Mit einem 
    Pipelineoperator (|) wird der Auftrag in der Variablen "$job" an 
    Stop-Job gesendet.

	$job | stop-job


LÖSCHEN VON AUFTRÄGEN

    Zum Löschen eines Hintergrundauftrags verwenden Sie das Cmdlet 
    "Remove-Job". Mit dem folgenden Befehl wird der Auftrag in der 
    Variablen "$job" gelöscht.

	remove-job -job $job 


UNTERSUCHEN FEHLERHAFTER AUFTRÄGE

    Wenn Sie ermitteln möchten, wieso bei einem Auftrag Fehler 
    aufgetreten sind, verwenden Sie die untergeordnete Reason-Eigensch
    aft des Auftragsobjekts.

    Mit dem folgenden Befehl wird ein Auftrag ohne die erforderlichen 
    Anmeldeinformationen gestartet. Dabei wird das Auftragsobjekt in der 
    Variablen "$job" gespeichert.


         $job = start-job -scriptblock {new-item -path HKLM:\Software\
         MyCompany}

         Id   Name  State    HasMoreData  Location   Command
         --   ----  -----    -----------  --------   -------
         1    Job1  Failed   False        localhost  new-item -path HKLM:\S...


    Mit dem folgenden Befehl wird die Reason-Eigenschaft verwendet, 
    um den Fehler zu suchen, der zum Fehler beim Auftrag geführt hat.

         $job.ChildJobs[0].JobStateInfo.Reason


    In diesem Fall wurde der Auftrag nicht erfolgreich ausgeführt, 
    weil zum Ausführen des Befehls auf dem Remotecomputer explizite 
    Anmeldeinformationen erforderlich waren. Der Wert der Reason-Eigenschaft 
    ist:

         Mit dem Remoteserver konnte keine Verbindung hergestellt 
         werden. Folgende Fehlermeldung wurde ausgegeben: Zugriff 
         verweigert.


DIE JOB-CMDLETS

    Start-Job     	Startet einen Hintergrundauftrag auf 
    			einem lokalen Computer.

    Get-Job          	Ruft die Hintergrundaufträge ab, die in 
    			der aktuellen Sitzung gestartet wurden.

    Receive-Job   	Ruft die Ergebnisse von Hintergrundaufträgen ab.

    Stop-Job         	Beendet einen Hintergrundauftrag.

    Wait-Job         	Unterdrückt die Eingabeaufforderung, bis 
    			ein oder alle Aufträge abgeschlossen wurden.

    Remove-Job       	Löscht einen Hintergrundauftrag.

    Invoke-Command  	Bei Verwendung des AsJob-Parameters wird jeder 
    			Befehl auf einem Remotecomputer als Hintergrundauftrag 
    			ausgeführt. Mit Invoke-Command können Sie auch jeden 
    			Auftragsbefehl remote ausführen, u. a. den Befehl "Start-Job".

 
SIEHE AUCH
   about_Remote_Jobs
   about_Job_Details
   about_Remote
   about_PSSessions  
   Start-Job
   Get-Job
   Receive-Job
   Stop-Job
   Wait-Job
   Remove-Job
   Invoke-Command




Inhaltsverzeichnis