Start-Job
Startet einen PowerShell-Hintergrundauftrag.
Syntax
Start-Job
[-Name <String>]
[-ScriptBlock] <ScriptBlock>
[-Credential <PSCredential>]
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-DefinitionName] <String>
[[-DefinitionPath] <String>]
[[-Type] <String>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
-LiteralPath <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
[-FilePath] <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Beschreibung
Das Start-Job
Cmdlet startet einen PowerShell-Hintergrundauftrag auf dem lokalen Computer.
Ein PowerShell-Hintergrundauftrag führt einen Befehl aus, ohne mit der aktuellen Sitzung zu interagieren. Wenn Sie einen Hintergrundauftrag starten, wird selbst dann sofort ein Auftragsobjekt zurückgegeben, wenn der Abschluss des Auftrags längere Zeit in Anspruch nimmt. Sie können ohne Unterbrechung in der Sitzung weiterarbeiten, während der Auftrag abgeschlossen wird.
Das Auftragsobjekt enthält nützliche Informationen zum Auftrag, aber nicht die Auftragsergebnisse.
Wenn der Auftrag abgeschlossen ist, verwenden Sie das Receive-Job
Cmdlet, um die Ergebnisse des Auftrags abzurufen. Weitere Informationen zu Hintergrundaufträgen finden Sie unter about_Jobs.
Um einen Hintergrundauftrag auf einem Remotecomputer auszuführen, verwenden Sie den AsJob-Parameter , der für viele Cmdlets verfügbar ist, oder verwenden Sie das Invoke-Command
Cmdlet, um einen Start-Job
Befehl auf dem Remotecomputer auszuführen. Weitere Informationen finden Sie unter about_Remote_Jobs.
Ab PowerShell 3.0 Start-Job
können Instanzen benutzerdefinierter Auftragstypen wie geplante Aufträge gestartet werden. Informationen zum Starten Start-Job
von Aufträgen mit benutzerdefinierten Typen finden Sie in den Hilfedokumenten zum Feature "Auftragstyp".
Ab PowerShell 6.0 können Sie Aufträge mit dem Hintergrundoperator ampersand (&
) starten. Die Funktionalität des Hintergrundoperators ähnelt .Start-Job
Mit beiden Methoden zum Starten eines Auftrags wird ein PSRemotingJob-Auftragsobjekt erstellt. Weitere Informationen zur Verwendung von ampersand (&
) finden Sie unter about_Operators.
Das Standardarbeitsverzeichnis für Aufträge ist hartcodiert. Der Windows-Standard ist $HOME\Documents
, und unter Linux oder macOS ist $HOME
der Standardwert . Der Skriptcode, der im Hintergrundauftrag ausgeführt wird, muss das Arbeitsverzeichnis nach Bedarf verwalten.
Hinweis
Das Erstellen eines Out-of-Process-Hintergrundauftrags mit Start-Job
wird in dem Szenario nicht unterstützt, in dem PowerShell in anderen Anwendungen gehostet wird, z. B. im PowerShell-Azure Functions.
Dies ist beabsichtigt, da Start-Job
die ausführbare Datei abhängig ist, unter $PSHOME
der pwsh
zum Starten eines Out-of-Process-Hintergrundauftrags verfügbar sein soll, aber wenn eine Anwendung PowerShell hostet, verwendet sie direkt die PowerShell NuGet SDK-Pakete und ist nicht pwsh
im Lieferumfang enthalten.
Der Ersatz in diesem Szenario stammt Start-ThreadJob
aus dem Modul ThreadJob.
Beispiele
Beispiel 1: Starten eines Hintergrundauftrags
In diesem Beispiel wird ein Hintergrundauftrag gestartet, der auf dem lokalen Computer ausgeführt wird.
Start-Job -ScriptBlock { Get-Process -Name pwsh }
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Process -Name pwsh
Start-Job
verwendet den ScriptBlock-Parameter , um als Hintergrundauftrag auszuführen Get-Process
. Der Name-Parameter gibt an, nach PowerShell-Prozessen zu suchen. pwsh
Die Auftragsinformationen werden angezeigt, und PowerShell kehrt zu einer Eingabeaufforderung zurück, während der Auftrag im Hintergrund ausgeführt wird.
Verwenden Sie das Cmdlet, um die Receive-Job
Ausgabe des Auftrags anzuzeigen. Beispiel: Receive-Job -Id 1
.
Beispiel 2: Verwenden des Hintergrundoperators zum Starten eines Hintergrundauftrags
In diesem Beispiel wird der Hintergrundoperator ampersand (&
) verwendet, um einen Hintergrundauftrag auf dem lokalen Computer zu starten. Der Auftrag erhält das gleiche Ergebnis wie Start-Job
in Beispiel 1.
Get-Process -Name pwsh &
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
5 Job5 BackgroundJob Running True localhost Microsoft.PowerShell.Man...
Get-Process
verwendet den Name-Parameter, um PowerShell-Prozesse anzugeben. pwsh
Der ampersand (&
) führt den Befehl als Hintergrundauftrag aus. Die Auftragsinformationen werden angezeigt, und PowerShell kehrt zu einer Eingabeaufforderung zurück, während der Auftrag im Hintergrund ausgeführt wird.
Verwenden Sie das Cmdlet, um die Receive-Job
Ausgabe des Auftrags anzuzeigen. Beispiel: Receive-Job -Id 5
.
Beispiel 3: Starten eines Auftrags mit Invoke-Command
In diesem Beispiel wird ein Auftrag auf mehreren Computern ausgeführt. Der Auftrag wird in einer Variablen gespeichert und mithilfe des Variablennamens in der PowerShell-Befehlszeile ausgeführt.
$jobWRM = Invoke-Command -ComputerName (Get-Content -Path C:\Servers.txt) -ScriptBlock {
Get-Service -Name WinRM } -JobName WinRM -ThrottleLimit 16 -AsJob
Ein Verwendeter Auftrag Invoke-Command
wird erstellt und in der $jobWRM
Variablen gespeichert. Invoke-Command
verwendet den ComputerName-Parameter , um die Computer anzugeben, auf denen der Auftrag ausgeführt wird. Get-Content
ruft die Servernamen aus der C:\Servers.txt
Datei ab.
Der ScriptBlock-Parameter gibt einen Befehl an, Get-Service
der den WinRM-Dienst abruft. Der JobName-Parameter gibt einen Anzeigenamen für den Auftrag WinRM an. Der ThrottleLimit-Parameter begrenzt die Anzahl gleichzeitiger Befehle auf 16. Der AsJob-Parameter startet einen Hintergrundauftrag, der den Befehl auf den Servern ausführt.
Beispiel 4: Abrufen von Auftragsinformationen
In diesem Beispiel werden Informationen zu einem Auftrag abgerufen und die Ergebnisse eines abgeschlossenen Auftrags angezeigt, der auf dem lokalen Computer ausgeführt wurde.
$j = Start-Job -ScriptBlock { Get-WinEvent -Log System } -Credential Domain01\User01
$j | Select-Object -Property *
State : Completed
HasMoreData : True
StatusMessage :
Location : localhost
Command : Get-WinEvent -Log System
JobStateInfo : Completed
Finished : System.Threading.ManualResetEvent
InstanceId : 27ce3fd9-40ed-488a-99e5-679cd91b9dd3
Id : 18
Name : Job18
ChildJobs : {Job19}
PSBeginTime : 8/8/2019 14:41:57
PSEndTime : 8/8/2019 14:42:07
PSJobTypeName : BackgroundJob
Output : {}
Error : {}
Progress : {}
Verbose : {}
Debug : {}
Warning : {}
Information : {}
Start-Job
verwendet den ScriptBlock-Parameter , um einen Befehl auszuführen, der angibt Get-WinEvent
, das Systemprotokoll abzurufen. Der Parameter Credential gibt ein Domänenbenutzerkonto mit der Berechtigung zum Ausführen des Auftrags auf dem Computer an. Das Auftragsobjekt wird in der $j
Variablen gespeichert.
Das -Objekt in der $j
Variablen wird in der Pipeline an Select-Object
gesendet. Der Property-Parameter gibt ein Sternchen (*
) an, um alle Eigenschaften des Auftragsobjekts anzuzeigen.
Beispiel 5: Ausführen eines Skripts als Hintergrundauftrag
In diesem Beispiel wird ein Skript auf dem lokalen Computer als Hintergrundauftrag ausgeführt.
Start-Job -FilePath C:\Scripts\Sample.ps1
Start-Job
verwendet den FilePath-Parameter , um eine Skriptdatei anzugeben, die auf dem lokalen Computer gespeichert ist.
Beispiel 6: Abrufen eines Prozesses mithilfe eines Hintergrundauftrags
In diesem Beispiel wird ein Hintergrundauftrag verwendet, um einen angegebenen Prozess nach Name abzurufen.
Start-Job -Name PShellJob -ScriptBlock { Get-Process -Name PowerShell }
Start-Job
verwendet den Parameter Name , um den Anzeigeauftragsnamen PShellJob anzugeben. Der ScriptBlock-Parameter gibt an Get-Process
, Prozesse mit dem Namen PowerShell abzurufen.
Beispiel 7: Sammeln und Speichern von Daten mithilfe eines Hintergrundauftrags
In diesem Beispiel wird ein Auftrag gestartet, der eine große Menge an Kartendaten sammelt und diese dann in einer .tif
Datei speichert.
Start-Job -Name GetMappingFiles -InitializationScript {Import-Module MapFunctions} -ScriptBlock {
Get-Map -Name * | Set-Content -Path D:\Maps.tif } -RunAs32
Start-Job
verwendet den Parameter Name , um den Anzeigeauftragsnamen GetMappingFiles anzugeben. Der Parameter InitializationScript führt einen Skriptblock aus, der das MapFunctions-Modul importiert. Der ScriptBlock-Parameter wird ausgeführt Get-Map
und Set-Content
speichert die Daten an der vom Path-Parameter angegebenen Position. Der RunAs32-Parameter führt den Prozess als 32-Bit-Version aus, auch unter einem 64-Bit-Betriebssystem.
Beispiel 8: Übergeben von Eingaben an einen Hintergrundauftrag
In diesem Beispiel wird die $input
automatische Variable verwendet, um ein Eingabeobjekt zu verarbeiten. Verwenden Sie Receive-Job
, um die Ausgabe des Auftrags anzuzeigen.
Start-Job -ScriptBlock { Get-Content $input } -InputObject "C:\Servers.txt"
Receive-Job -Name Job45 -Keep
Server01
Server02
Server03
Server04
Start-Job
verwendet den ScriptBlock-Parameter, um mit der automatischen $input
Variablen auszuführenGet-Content
. Die $input
Variable ruft Objekte aus dem InputObject-Parameter ab. Receive-Job
verwendet den Parameter Name , um den Auftrag anzugeben, und gibt die Ergebnisse aus. Der Keep-Parameter speichert die Auftragsausgabe, sodass sie während der PowerShell-Sitzung erneut angezeigt werden kann.
Beispiel 9: Verwenden des ArgumentList-Parameters zum Angeben eines Arrays
In diesem Beispiel wird der ArgumentList-Parameter verwendet, um ein Array von Argumenten anzugeben. Das Array ist eine durch Trennzeichen getrennte Liste von Prozessnamen.
Start-Job -ScriptBlock { Get-Process -Name $args } -ArgumentList powershell, pwsh, notepad
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Process -Name $args
Das Start-Job
Cmdlet verwendet den ScriptBlock-Parameter , um einen Befehl auszuführen. Get-Process
verwendet den Parameter Name , um die automatische Variable $args
anzugeben. Der ArgumentList-Parameter übergibt das Array von Prozessnamen an $args
. Die Prozessnamen powershell, pwsh und notepad sind Prozesse, die auf dem lokalen Computer ausgeführt werden.
Verwenden Sie das Cmdlet, um die Receive-Job
Ausgabe des Auftrags anzuzeigen. Beispiel: Receive-Job -Id 1
.
Parameter
-ArgumentList
Gibt ein Array von Argumenten oder Parameterwerten für das Skript an, das durch den FilePath-Parameter oder einen mit dem ScriptBlock-Parameter angegebenen Befehl angegeben wird.
Argumente müssen als eindimensionales Arrayargument an ArgumentList übergeben werden. Beispiel: eine durch Trennzeichen getrennte Liste. Weitere Informationen zum Verhalten von ArgumentList finden Sie unter about_Splatting.
Type: | Object[] |
Aliases: | Args |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Authentication
Gibt den Mechanismus an, der zum Authentifizieren von Benutzeranmeldeinformationen verwendet wird.
Die zulässigen Werte für diesen Parameter sind wie folgt:
- Standard
- Basic
- Credssp
- Digest
- Kerberos
- Aushandeln
- NegotiateWithImplicitCredential
Der Standardwert ist Default.
Die CredSSP-Authentifizierung ist nur in Windows Vista, Windows Server 2008 und höheren Versionen des Windows-Betriebssystems verfügbar.
Weitere Informationen zu den Werten dieses Parameters finden Sie unter AuthenticationMechanism.
Achtung
Die CredSSP (Credential Security Support Provider)-Authentifizierung, bei der die Anmeldeinformationen des Benutzers zur Authentifizierung an einen Remotecomputer übergeben werden, ist für Befehle konzipiert, die die Authentifizierung auf 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.
Type: | AuthenticationMechanism |
Accepted values: | Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos |
Position: | Named |
Default value: | Default |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
Gibt ein Benutzerkonto an, das über die Berechtigung zum Ausführen dieser Aktion verfügt. Wenn der Credential-Parameter nicht angegeben ist, verwendet der Befehl die Anmeldeinformationen des aktuellen Benutzers.
Geben Sie einen Benutzernamen ein, z. B. User01 oder Domain01\User01, oder geben Sie ein vom Get-Credential
Cmdlet generiertes PSCredential-Objekt ein. Wenn Sie einen Benutzernamen eingeben, werden Sie aufgefordert, das Kennwort einzugeben.
Anmeldeinformationen werden in einem PSCredential-Objekt gespeichert, und das Kennwort wird als SecureString gespeichert.
Hinweis
Weitere Informationen zum Schutz von SecureString-Daten finden Sie unter Wie sicher ist SecureString?.
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefinitionName
Gibt den Definitionsnamen des Auftrags an, den dieses Cmdlet startet. Verwenden Sie diesen Parameter, um benutzerdefinierte Auftragstypen zu starten, die über einen Definitionsnamen verfügen, z. B. geplante Aufträge.
Wenn Sie verwendenStart-Job
, um eine instance eines geplanten Auftrags zu starten, wird der Auftrag sofort gestartet, unabhängig von Auftragstriggern oder Auftragsoptionen. Der resultierende Auftrag instance ist ein geplanter Auftrag, wird aber nicht wie ausgelöste geplante Aufträge auf dem Datenträger gespeichert. Sie können den ArgumentList-Parameter von Start-Job
nicht verwenden, um Werte für Parameter von Skripts bereitzustellen, die in einem geplanten Auftrag ausgeführt werden.
Dieser Parameter wurde in PowerShell 3.0 eingeführt.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefinitionPath
Gibt den Pfad der Definition für den Auftrag an, den dieses Cmdlet startet. Geben Sie den Definitionspfad ein. Die Verkettung der Werte der Parameter DefinitionPath und DefinitionName ist der vollqualifizierte Pfad der Auftragsdefinition. Verwenden Sie diesen Parameter, um benutzerdefinierte Auftragstypen zu starten, die über einen Definitionspfad verfügen, z. B. geplante Aufträge.
Bei geplanten Aufträgen ist $home\AppData\Local\Windows\PowerShell\ScheduledJob
der Wert des DefinitionPath-Parameters .
Dieser Parameter wurde in PowerShell 3.0 eingeführt.
Type: | String |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilePath
Gibt ein lokales Skript an, das Start-Job
als Hintergrundauftrag ausgeführt wird. Geben Sie den Pfad und dateinamen des Skripts ein, oder verwenden Sie die Pipeline, um einen Skriptpfad an zu Start-Job
senden. Das Skript muss sich auf dem lokalen Computer oder in einem Ordner befinden, auf den der lokale Computer zugreifen kann.
Wenn Sie diesen Parameter verwenden, konvertiert PowerShell den Inhalt der angegebenen Skriptdatei in einen Skriptblock und führt den Skriptblock als Hintergrundauftrag aus.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InitializationScript
Gibt Befehle an, die vor dem Starten des Auftrags ausgeführt werden. Um einen Skriptblock zu erstellen, schließen Sie die Befehle in geschweifte Klammern ({}
) ein.
Verwenden Sie diesen Parameter zum Vorbereiten der Sitzung, in der der Auftrag ausgeführt wird. Sie können damit beispielsweise Funktionen, Snap-Ins und Module zur Sitzung hinzufügen.
Type: | ScriptBlock |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
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, der die Objekte generiert.
Verwenden Sie im Wert des ScriptBlock-Parameters die $input
automatische Variable, um die Eingabeobjekte darzustellen.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-LiteralPath
Gibt ein lokales Skript an, das dieses Cmdlet als Hintergrundauftrag ausführt. Geben Sie den Pfad eines Skripts auf dem lokalen Computer ein.
Start-Job
verwendet den Wert des LiteralPath-Parameters genau so, wie er eingegeben wird. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einfache Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren.
Type: | String |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
Gibt einen Anzeigenamen für den neuen Auftrag an. Sie können den Namen verwenden, um den Auftrag für andere Auftrags-Cmdlets zu identifizieren, z. B. das Stop-Job
Cmdlet.
Der Standard-Anzeigename ist Job#
, wobei #
eine Ordnungszahl ist, die für jeden Auftrag inkrementiert wird.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-PSVersion
Gibt eine Version an. Start-Job
führt den Auftrag mit der Version von PowerShell aus. Die zulässigen Werte für diesen Parameter sind: 2.0
und 3.0
.
Dieser Parameter wurde in PowerShell 3.0 eingeführt.
Type: | Version |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RunAs32
Gibt an, dass Start-Job
den Auftrag in einem 32-Bit-Prozess ausführt. RunAs32 erzwingt die Ausführung des Auftrags in einem 32-Bit-Prozess, auch unter einem 64-Bit-Betriebssystem.
In 64-Bit-Versionen von Windows 7 und Windows Server 2008 R2 können Sie, wenn der Start-Job
Befehl den RunAs32-Parameter enthält, den Credential-Parameter nicht verwenden, um die Anmeldeinformationen eines anderen Benutzers anzugeben.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ScriptBlock
Gibt die im Hintergrundauftrag auszuführenden Befehle an. Um einen Skriptblock zu erstellen, schließen Sie die Befehle in geschweifte Klammern ({}
) ein. Verwenden Sie die $input
automatische Variable, um auf den Wert des InputObject-Parameters zuzugreifen. Dieser Parameter ist erforderlich.
Type: | ScriptBlock |
Aliases: | Command |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Type
Gibt den benutzerdefinierten Typ für Aufträge an, die von gestartet werden Start-Job
. Geben Sie einen benutzerdefinierten Auftragstypnamen ein, wie z. B. „PSScheduledJob“ für geplante Aufträge oder „SWorkflowJob“für Workflowaufträge. Dieser Parameter ist für Standardhintergrundaufträge nicht gültig.
Dieser Parameter wurde in PowerShell 3.0 eingeführt.
Type: | String |
Position: | 2 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
Sie können die Pipeline verwenden, um ein Objekt mit der Name-Eigenschaft an den Parameter Name zu senden. Sie können beispielsweise ein FileInfo-Objekt von an Get-ChildItem
pipelineieren Start-Job
.
Ausgaben
System.Management.Automation.PSRemotingJob
Start-Job
gibt ein PSRemotingJob-Objekt zurück, das den gestarteten Auftrag darstellt.
Hinweise
Um im Hintergrund auszuführen, Start-Job
wird in einer eigenen Sitzung in der aktuellen Sitzung ausgeführt. Wenn Sie das Invoke-Command
Cmdlet verwenden, um einen Start-Job
Befehl in einer Sitzung auf einem Remotecomputer auszuführen, Start-Job
wird in einer Sitzung in der Remotesitzung ausgeführt.