Start-Job

Startet einen Windows PowerShell-Hintergrundauftrag.

Syntax

Start-Job [-ScriptBlock] <scriptblock> [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

Start-Job [[-FilePath] <string>] [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

Beschreibung

Mit dem Cmdlet "Start-Job" wird ein Windows PowerShell-Hintergrundauftrag auf dem lokalen Computer gestartet.

In einem Windows PowerShell-Hintergrundauftrag wird ein Befehl "im Hintergrund" ohne Interaktion mit der aktuellen Sitzung ausgeführt. Wenn Sie einen Hintergrundauftrag starten, wird direkt ein Auftragsobjekt zurückgegeben, auch 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.

Das Auftragsobjekt enthält nützliche Informationen über den Auftrag, jedoch keine Auftragsergebnisse. Wenn der Auftrag abgeschlossen wird, können Sie die Ergebnisse mit dem Cmdlet "Receive-Job" abrufen. Weitere Informationen zu Hintergrundaufträgen finden Sie unter "about_Jobs".

Mit dem AsJob-Parameter, der in vielen Cmdlets verfügbar ist, können Sie einen Hintergrundauftrag auf einem Remotecomputer auszuführen. Sie können auch mit dem Cmdlet "Invoke-Command" einen Start-Job-Befehl auf dem Remotecomputer ausführen. Weitere Informationen finden Sie unter "about_Remote_Jobs".

Parameter

-ArgumentList <Object[]>

Gibt die Argumente (Parameterwerte) für das Skript an, das vom FilePath-Parameter angegeben wird.

Da alle Werte, die auf den ArgumentList-Parameternamen folgen, als Werte von ArgumentList interpretiert werden, sollte der ArgumentList-Parameter der letzte Parameter im Befehl sein.

Erforderlich?

false

Position?

named

Standardwert

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-Authentication <AuthenticationMechanism>

Gibt den Mechanismus an, der zum Authentifizieren der Anmeldeinformationen des Benutzers verwendet wird. Gültige Werte sind "Default", "Basic", "Credssp", "Digest", "Kerberos", "Negotiate" und "NegotiateWithImplicitCredential". Der Standardwert ist "Default".

Die CredSSP-Authentifizierung ist nur in Windows Vista, Windows Server 2008 und höheren Versionen von Windows verfügbar.

Weitere Informationen zu den Werten dieses Parameters finden Sie unter der Beschreibung der System.Management.Automation.Runspaces.AuthenticationMechanism-Enumeration in MSDN.

VORSICHT: Die CredSSP (Credential Security Service Provider)-Authentifizierung, bei der die Anmeldeinformationen des Benutzers zur Authentifizierung an einen Remotecomputer übergeben werden, ist für Befehle konzipiert, die die Authentifizierung mehr als einer Ressource erfordern, z. B. beim Zugriff auf eine Remotenetzwerkfreigabe. Dieser Mechanismus erhöht das Sicherheitsrisiko des Remotevorgangs. Wenn die Sicherheit des Remotecomputers gefährdet ist, können die an ihn übergebenen Anmeldeinformationen zum Steuern der Netzwerksitzung verwendet werden.

Erforderlich?

false

Position?

named

Standardwert

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-Credential <PSCredential>

Gibt ein Benutzerkonto an, das über die Berechtigung zum Ausführen dieser Aktion verfügt. Der Standardwert ist der aktuelle Benutzer.

Geben Sie einen Benutzernamen ein, z. B. "User01" oder "Domain01\User01", oder geben Sie ein PSCredential-Objekt ein, z. B. ein Objekt aus dem Cmdlet "Get-Credential".

Erforderlich?

false

Position?

named

Standardwert

Aktueller Benutzer

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-FilePath <string>

Führt das angegebene lokale Skript als Hintergrundauftrag aus. Geben Sie den Pfad und den Dateinamen des Skripts ein, oder übergeben Sie einen Skriptpfad über die Pipeline an Start-Job. Das Skript muss sich auf dem lokalen Computer oder in einem Verzeichnis befinden, auf das der lokale Computer zugreifen kann.

Wenn Sie diesen Parameter verwenden, wird der Inhalt der angegebenen Skriptdatei Windows PowerShell in einen Skriptblock konvertiert, und der Skriptblock wird als Hintergrundauftrag ausgeführt.

Erforderlich?

false

Position?

1

Standardwert

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-InitializationScript <scriptblock>

Gibt die Befehle an, die vor Starten des Auftrags ausgeführt werden. Schließen Sie die Befehle in geschweifte Klammern ({}) ein, um einen Skriptblock zu erstellen.

Verwenden Sie diesen Parameter, um die Sitzung vorzubereiten, in der der Auftrag ausgeführt wird. Sie können ihn z. B. verwenden, um der Sitzung Funktionen, Snap-Ins und Module hinzuzufügen.

Erforderlich?

false

Position?

2

Standardwert

Keiner

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-InputObject <psobject>

Gibt die Eingabe für den Befehl an. Geben Sie eine Variable ein, die die Objekte enthält, oder geben Sie einen Befehl oder einen Ausdruck ein, mit dem die Objekte generiert werden.

Verwenden Sie die automatische Variable "$input" im Wert des ScriptBlock-Parameters, um die Eingabeobjekte darzustellen.

Erforderlich?

false

Position?

named

Standardwert

Pipelineeingaben akzeptieren?

true (ByValue)

Platzhalterzeichen akzeptieren?

false

-Name <string>

Gibt einen Anzeigenamen für den neuen Auftrag an. Anhand des Namens können Sie den Auftrag gegenüber anderen Job-Cmdlets wie Stop-Job identifizieren.

Der Standardanzeigename ist "Job#", wobei "#" eine Ordnungszahl darstellt, deren Wert für jeden Auftrag erhöht wird.

Erforderlich?

false

Position?

named

Standardwert

Job<Nummer>

Pipelineeingaben akzeptieren?

true (ByPropertyName)

Platzhalterzeichen akzeptieren?

false

-RunAs32

Führt den Auftrag in einem 32-Bit-Prozess aus.

Verwenden Sie diesen Parameter, um zu erzwingen, dass der Auftrag auf einem 64-Bit-Betriebssystem in einem 32-Bit-Prozess ausgeführt wird.

Erforderlich?

false

Position?

named

Standardwert

False

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

-ScriptBlock <scriptblock>

Gibt die Befehle an, die im Hintergrundauftrag ausgeführt werden sollen. Schließen Sie die Befehle in geschweifte Klammern ({}) ein, um einen Skriptblock zu erstellen. Dieser Parameter ist erforderlich.

Erforderlich?

true

Position?

1

Standardwert

Pipelineeingaben akzeptieren?

false

Platzhalterzeichen akzeptieren?

false

<CommonParameters>

Dieses Cmdlet unterstützt die folgenden allgemeinen Parameter: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer und -OutVariable. Weitere Informationen finden Sie unter about_Commonparameters.

Eingaben und Ausgaben

Der Eingabetyp ist der Typ der Objekte, die über die Pipeline an das Cmdlet übergeben werden können. Der Rückgabetyp ist der Typ der Objekte, die das Cmdlet zurückgibt.

Eingaben

System.String

Sie können einen Dateipfad über die Pipeline an Start-Job übergeben.

Ausgaben

System.Management.Automation.RemotingJob

Das Cmdlet "Start-Job" gibt ein Objekt zurück, das den gestarteten Auftrag darstellt.

Hinweise

Start-Job wird für die Ausführung im Hintergrund in einer eigenen Sitzung innerhalb der aktuellen Sitzung ausgeführt. Wenn Sie einen Start-Job-Befehl mit dem Cmdlet "Invoke-Command" in einer Sitzung auf einem Remotecomputer ausführen, wird Start-Job in einer Sitzung innerhalb der Remotesitzung ausgeführt.

Beispiel 1

C:\PS>start-job -scriptblock {get-process}

C:\PS> start-job -command "get-process"

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

Beschreibung
-----------
Mit diesem Befehl wird ein Hintergrundauftrag zur Ausführung eines Get-Process-Befehls gestartet. Der Befehl gibt ein Auftragsobjekt mit Informationen über den Auftrag zurück. Die Eingabeaufforderung wird sofort angezeigt, damit Sie in der Sitzung arbeiten können, während der Auftrag im Hintergrund ausgeführt wird.





Beispiel 2

C:\PS>$jobWRM = invoke-command -computerName (get-content servers.txt) -scriptblock {get-service winrm} -jobname WinRM -throttlelimit 16 -AsJob

Beschreibung
-----------
In diesem Befehl wird mit dem Cmdlet "Invoke-Command" und den entsprechenden AsJob-Parametern ein Hintergrundauftrag gestartet, mit dem der Befehl "get-service winrm" auf vielen Computern ausgeführt wird. Da der Befehl auf einem Server mit erheblichem Netzwerkdatenverkehr ausgeführt wird, wird die Anzahl der gleichzeitigen Befehle hier mit dem ThrottleLimit-Parameter von Invoke-Command auf 16 beschränkt. 

Im Befehl werden mit dem ComputerName-Parameter die Computer angegeben, auf denen der Auftrag ausgeführt wird. Der Wert des ComputerName-Parameters ist ein Get-Content-Befehl, mit dem der Text in der Datei "Servers.txt" abgerufen wird, einer Datei mit Computernamen in einer Domäne. 

Im Befehl wird mit dem ScriptBlock-Parameter der Befehl angegeben, und mit dem JobName-Parameter wird ein Anzeigename für den Auftrag angegeben.





Beispiel 3

C:\PS>$j = start-job -scriptblock {get-eventlog -log system} -credential domain01\user01

C:\PS> $j | format-list -property *

HasMoreData   : True
StatusMessage :
Location      : localhost
Command       : get-eventlog -log system
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 2d9d775f-63e0-4d48-b4bc-c05d0e177f34
Id            : 1
Name          : Job1
ChildJobs     : {Job2}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
StateChanged  :

C:\PS> $j.JobStateInfo.state
Completed

C:\PS> $results = receive-job -job $j

C:\PS> $results
Index Time          Type        Source                EventID Message
----- ----          ----        ------                ------- -------
84366 Feb 18 19:20  Information Service Control M...     7036 The description...
84365 Feb 18 19:16  Information Service Control M...     7036 The description...
84364 Feb 18 19:10  Information Service Control M...     7036 The description...
...

Beschreibung
-----------
Mit diesen Befehlen wird ein Hintergrundauftrag verwaltet, der alle Ereignisse aus dem Systemprotokoll in der Ereignisanzeige abruft. Der Auftrag wird auf dem lokalen Computer ausgeführt.

Im ersten Befehl wird der Auftrag mit dem Cmdlet "Start-Job" gestartet. Mit dem Credential-Parameter wird das Benutzerkonto eines Benutzers angegeben, der die Berechtigung zum Ausführen des Auftrags auf dem Computer hat. Anschließend wird das Auftragsobjekt, das von Start-Job zurückgegeben wird, in der Variablen "$j" gespeichert.

Während der Auftrag abgeschlossen wird, können Sie andere Tätigkeiten fortsetzen.

Im zweiten Befehl wird das Auftragsobjekt in $j mit einem Pipelineoperator (|) an das Cmdlet "Format-List" übergeben. Im Befehl "Format-List" werden mit dem Property-Parameter mit dem Wert für alle (*) alle Eigenschaften des Auftragsobjekts in einer Liste angezeigt.

Im dritten Befehl wird der Wert der JobStateInfo-Eigenschaft angezeigt. Dieser enthält den Status des Auftrags.

Im vierten Befehl wird das Cmdlet "Receive-Job" verwendet, um die Ergebnisse des Auftrags abzurufen. Die Ergebnisse werden in der Ergebnisvariablen "$results" gespeichert.

Im letzten Befehl wird der Inhalt der Variablen "$results" angezeigt.





Beispiel 4

C:\PS>start-job -filepath c:\scripts\sample.ps1

Beschreibung
-----------
Mit diesem Befehl wird das Skript "Sample.ps1" als Hintergrundauftrag ausgeführt.





Beispiel 5

C:\PS>start-job -name WinRm -scriptblock {get-process winrm}

Beschreibung
-----------
Mit diesem Befehl wird ein Hintergrundauftrag ausgeführt, der den WinRM-Prozess auf dem lokalen Computer abruft. Der Befehl, der im Hintergrundauftrag ausgeführt wird, wird mit dem ScriptBlock-Parameter angegeben. Ein Anzeigename für den Auftrag wird mit dem Name-Parameter angegeben.





Beispiel 6

C:\PS>start-job -name GetMappingFiles -initializationScript {import-module MapFunctions} -scriptblock {Get-Map -name * | set-content D:\Maps.tif} -runAs32

Beschreibung
-----------
Mit diesem Befehl wird ein Auftrag gestartet, der eine große Datenmenge sammelt und in einer TIF-Datei speichert. Der Befehl führt mithilfe des InitializationScript-Parameters einen Skriptblock aus, der ein erforderliches Modul importiert. Darüber hinaus führt er den Auftrag in einem 32-Bit-Prozess mithilfe des RunAs32-Parameters aus, auch wenn der Computer über ein 64-Bit-Betriebssystem verfügt.





Siehe auch

Konzepte

about_Jobs
about_Job_Details
about_Remote_Jobs
Get-Job
Receive-Job
Wait-Job
Stop-Job
Remove-Job
Invoke-Command