Start-Job
Startar ett PowerShell-bakgrundsjobb.
Syntax
Start-Job
[-Name <String>]
[-ScriptBlock] <ScriptBlock>
[-Credential <PSCredential>]
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-WorkingDirectory <String>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-DefinitionName] <String>
[[-DefinitionPath] <String>]
[[-Type] <String>]
[-WorkingDirectory <String>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
[-FilePath] <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-WorkingDirectory <String>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Start-Job
[-Name <String>]
[-Credential <PSCredential>]
-LiteralPath <String>
[-Authentication <AuthenticationMechanism>]
[[-InitializationScript] <ScriptBlock>]
[-WorkingDirectory <String>]
[-RunAs32]
[-PSVersion <Version>]
[-InputObject <PSObject>]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Description
Cmdleten Start-Job
startar ett PowerShell-bakgrundsjobb på den lokala datorn.
Ett PowerShell-bakgrundsjobb kör ett kommando utan att interagera med den aktuella sessionen. När du startar ett bakgrundsjobb returneras ett jobbobjekt omedelbart, även om jobbet tar längre tid att slutföra. Du kan fortsätta att arbeta i sessionen utan avbrott medan jobbet körs.
Jobbobjektet innehåller användbar information om jobbet, men det innehåller inte jobbresultatet.
När jobbet har slutförts använder du cmdleten Receive-Job
för att hämta jobbets resultat. Mer information om bakgrundsjobb finns i about_Jobs.
Om du vill köra ett bakgrundsjobb på en fjärrdator använder du asjob-parametern som är tillgänglig på många cmdletar eller använder cmdleten Invoke-Command
för att köra ett Start-Job
kommando på fjärrdatorn. Mer information finns i about_Remote_Jobs.
Från och med PowerShell 3.0 Start-Job
kan starta instanser av anpassade jobbtyper, till exempel schemalagda jobb. Information om hur du använder Start-Job
för att starta jobb med anpassade typer finns i hjälpdokumenten för jobbtypsfunktionen.
Från och med PowerShell 6.0 kan du starta jobb med bakgrundsoperatorn etand (&
). Funktionen för bakgrundsoperatorn liknar Start-Job
. Båda metoderna för att starta ett jobb skapar ett PSRemotingJob-jobbobjekt . Mer information om hur du använder et-tecken (&
) finns i about_Operators.
PowerShell 7 introducerade parametern WorkingDirectory som anger ett bakgrundsjobbs första arbetskatalog. Om parametern inte anges Start-Job
används som standard den aktuella arbetskatalogen för anroparen som startade jobbet.
Anteckning
Det går inte att skapa ett out-of-process-bakgrundsjobb med Start-Job
i scenariot där PowerShell finns i andra program, till exempel PowerShell-Azure Functions.
Detta är avsiktligt eftersom Start-Job
beror på vilken pwsh
körbar fil som ska vara tillgänglig under $PSHOME
för att starta ett out-of-process-bakgrundsjobb, men när ett program är värd för PowerShell använder det PowerShell NuGet SDK-paketen direkt och har pwsh
inte levererats.
Ersättningen i det scenariot kommer Start-ThreadJob
från modulen ThreadJob.
Exempel
Exempel 1: Starta ett bakgrundsjobb
Det här exemplet startar ett bakgrundsjobb som körs på den lokala datorn.
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
använder parametern ScriptBlock för att köras Get-Process
som ett bakgrundsjobb. Parametern Namn anger för att hitta PowerShell-processer, pwsh
. Jobbinformationen visas och PowerShell återgår till en prompt medan jobbet körs i bakgrunden.
Om du vill visa jobbets utdata använder du cmdleten Receive-Job
. Till exempel Receive-Job -Id 1
.
Exempel 2: Använd bakgrundsoperatorn för att starta ett bakgrundsjobb
I det här exemplet används et-et-bakgrundsoperatorn (&
) för att starta ett bakgrundsjobb på den lokala datorn. Jobbet får samma resultat som Start-Job
i exempel 1.
Get-Process -Name pwsh &
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
5 Job5 BackgroundJob Running True localhost Microsoft.PowerShell.Man...
Get-Process
använder parametern Namn för att ange PowerShell-processer, pwsh
. Et-et-et(&
) kör kommandot som ett bakgrundsjobb. Jobbinformationen visas och PowerShell återgår till en prompt medan jobbet körs i bakgrunden.
Om du vill visa jobbets utdata använder du cmdleten Receive-Job
. Till exempel Receive-Job -Id 5
.
Exempel 3: Starta ett jobb med Invoke-Command
Det här exemplet kör ett jobb på flera datorer. Jobbet lagras i en variabel och körs med hjälp av variabelnamnet på PowerShell-kommandoraden.
$jobWRM = Invoke-Command -ComputerName (Get-Content -Path C:\Servers.txt) -ScriptBlock {
Get-Service -Name WinRM } -JobName WinRM -ThrottleLimit 16 -AsJob
Ett jobb som använder Invoke-Command
skapas och lagras i variabeln $jobWRM
. Invoke-Command
använder parametern ComputerName för att ange de datorer där jobbet körs. Get-Content
hämtar servernamnen C:\Servers.txt
från filen.
Parametern ScriptBlock anger ett kommando som Get-Service
hämtar WinRM-tjänsten . JobName-parametern anger ett eget namn för jobbet, WinRM. Parametern ThrottleLimit begränsar antalet samtidiga kommandon till 16. Parametern AsJob startar ett bakgrundsjobb som kör kommandot på servrarna.
Exempel 4: Hämta jobbinformation
Det här exemplet hämtar information om ett jobb och visar resultatet av ett slutfört jobb som kördes på den lokala datorn.
$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
använder parametern ScriptBlock för att köra ett kommando som anger att systemloggen ska hämtasGet-WinEvent
. Parametern Credential anger ett domänanvändarkonto med behörighet att köra jobbet på datorn. Jobbobjektet lagras i variabeln $j
.
Objektet i variabeln $j
skickas ned i pipelinen till Select-Object
. Parametern Egenskap anger en asterisk (*
) för att visa alla jobbobjektets egenskaper.
Exempel 5: Kör ett skript som ett bakgrundsjobb
I det här exemplet körs ett skript på den lokala datorn som ett bakgrundsjobb.
Start-Job -FilePath C:\Scripts\Sample.ps1
Start-Job
använder FilePath-parametern för att ange en skriptfil som lagras på den lokala datorn.
Exempel 6: Hämta en process med hjälp av ett bakgrundsjobb
I det här exemplet används ett bakgrundsjobb för att hämta en angiven process efter namn.
Start-Job -Name PShellJob -ScriptBlock { Get-Process -Name PowerShell }
Start-Job
använder parametern Namn för att ange ett eget jobbnamn, PShellJob. Parametern ScriptBlock anger att processer med namnet PowerShell ska hämtasGet-Process
.
Exempel 7: Samla in och spara data med hjälp av ett bakgrundsjobb
Det här exemplet startar ett jobb som samlar in en stor mängd kartdata och sedan sparar dem i en .tif
fil.
Start-Job -Name GetMappingFiles -InitializationScript {Import-Module MapFunctions} -ScriptBlock {
Get-Map -Name * | Set-Content -Path D:\Maps.tif }
Start-Job
använder parametern Namn för att ange ett eget jobbnamn, GetMappingFiles. Parametern InitializationScript kör ett skriptblock som importerar MapFunctions-modulen . Parametern ScriptBlock kör Get-Map
och Set-Content
sparar data på den plats som anges av parametern Path .
Exempel 8: Skicka indata till ett bakgrundsjobb
I det här exemplet används den $input
automatiska variabeln för att bearbeta ett indataobjekt. Använd Receive-Job
för att visa jobbets utdata.
Start-Job -ScriptBlock { Get-Content $input } -InputObject "C:\Servers.txt"
Receive-Job -Name Job45 -Keep
Server01
Server02
Server03
Server04
Start-Job
använder parametern ScriptBlock för att köra Get-Content
med den $input
automatiska variabeln. Variabeln $input
hämtar objekt från parametern InputObject . Receive-Job
använder parametern Namn för att ange jobbet och returnerar resultatet. Parametern Behåll sparar jobbets utdata så att det kan visas igen under PowerShell-sessionen.
Exempel 9: Ange arbetskatalogen för ett bakgrundsjobb
Med WorkingDirectory kan du ange en alternativ katalog för ett jobb som du kan köra skript från eller öppna filer från. I det här exemplet anger bakgrundsjobbet en arbetskatalog som skiljer sig från den aktuella katalogplatsen.
PS C:\Test> Start-Job -WorkingDirectory C:\Test\Scripts { $PWD } | Receive-Job -AutoRemoveJob -Wait
Path
----
C:\Test\Scripts
Det här exemplets aktuella arbetskatalog är C:\Test
. Start-Job
använder parametern WorkingDirectory för att ange jobbets arbetskatalog. Parametern ScriptBlock använder $PWD
för att visa jobbets arbetskatalog. Receive-Job
visar bakgrundsjobbets utdata.
AutoRemoveJob tar bort jobbet och Wait ignorerar kommandotolken tills alla resultat tas emot.
Exempel 10: Använd parametern ArgumentList för att ange en matris
I det här exemplet används parametern ArgumentList för att ange en matris med argument. Matrisen är en kommaavgränsad lista över processnamn.
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
Cmdleten Start-Job
använder parametern ScriptBlock för att köra ett kommando. Get-Process
använder parametern Namn för att ange den automatiska variabeln $args
. Parametern ArgumentList skickar matrisen med processnamn till $args
. Processnamnen powershell, pwsh och Anteckningar är processer som körs på den lokala datorn.
Om du vill visa jobbets utdata använder du cmdleten Receive-Job
. Till exempel Receive-Job -Id 1
.
Exempel 11: Kör jobb i en Windows PowerShell 5.1
I det här exemplet används PSVersion-parametern med värdet 5.1 för att köra jobbet i en Windows PowerShell 5.1-session.
$PSVersionTable.PSVersion
Major Minor Patch PreReleaseLabel BuildLabel
----- ----- ----- --------------- ----------
7 0 0 rc.1
$job = Start-Job { $PSVersionTable.PSVersion } -PSVersion 5.1
Receive-Job $job
Major Minor Build Revision
----- ----- ----- --------
5 1 14393 3383
Parametrar
-ArgumentList
Anger en matris med argument, eller parametervärden, för skriptet som anges av FilePath-parametern eller ett kommando som anges med parametern ScriptBlock .
Argument måste skickas till ArgumentList som matrisargument med en dimension. Till exempel en kommaavgränsad lista. Mer information om beteendet för ArgumentList finns i about_Splatting.
Type: | Object[] |
Aliases: | Args |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Authentication
Anger den mekanism som används för att autentisera användarautentiseringsuppgifter.
Godkända värden för den här parametern är följande:
- Standardvärde
- Basic
- Credssp
- Sammandrag
- Kerberos
- Negotiate
- NegotiateWithImplicitCredential
Standardvärdet är Standard.
CredSSP-autentisering är endast tillgängligt i Windows Vista, Windows Server 2008 och senare versioner av Windows-operativsystemet.
Mer information om värdena för den här parametern finns i AuthenticationMechanism.
Varning
CredSSP-autentisering (CredSSP), där användarens autentiseringsuppgifter skickas till en fjärrdator som ska autentiseras, är utformad för kommandon som kräver autentisering på mer än en resurs, till exempel åtkomst till en fjärrnätverksresurs. Den här mekanismen ökar säkerhetsrisken för fjärråtgärden. Om fjärrdatorn komprometteras kan de autentiseringsuppgifter som skickas till den användas för att styra nätverkssessionen.
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
Anger ett användarkonto som har behörighet att utföra den här åtgärden. Om parametern Credential inte har angetts använder kommandot den aktuella användarens autentiseringsuppgifter.
Ange ett användarnamn, till exempel User01 eller Domain01\User01, eller ange ett PSCredential-objekt som genereras av cmdleten Get-Credential
. Om du skriver ett användarnamn uppmanas du att ange lösenordet.
Autentiseringsuppgifter lagras i ett PSCredential-objekt och lösenordet lagras som en SecureString.
Anteckning
Mer information om SecureString-dataskydd finns i Hur säker är SecureString?.
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefinitionName
Anger definitionsnamnet för jobbet som den här cmdleten startar. Använd den här parametern för att starta anpassade jobbtyper som har ett definitionsnamn, till exempel schemalagda jobb.
När du använder Start-Job
för att starta en instans av ett schemalagt jobb startar jobbet omedelbart, oavsett jobbutlösare eller jobbalternativ. Den resulterande jobbinstansen är ett schemalagt jobb, men den sparas inte på disk som utlösta schemalagda jobb. Du kan inte använda parametern Start-Job
ArgumentList för för att ange värden för parametrar för skript som körs i ett schemalagt jobb.
Den här parametern introducerades i PowerShell 3.0.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DefinitionPath
Anger sökvägen till definitionen för jobbet som den här cmdleten startar. Ange definitionssökvägen. Sammanfogningen av värdena för parametrarna DefinitionPath och DefinitionName är den fullständigt kvalificerade sökvägen för jobbdefinitionen. Använd den här parametern för att starta anpassade jobbtyper som har en definitionssökväg, till exempel schemalagda jobb.
För schemalagda jobb är $home\AppData\Local\Windows\PowerShell\ScheduledJob
värdet för parametern DefinitionPath .
Den här parametern introducerades i PowerShell 3.0.
Type: | String |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilePath
Anger ett lokalt skript som Start-Job
körs som ett bakgrundsjobb. Ange sökvägen och filnamnet för skriptet eller använd pipelinen för att skicka en skriptsökväg till Start-Job
. Skriptet måste finnas på den lokala datorn eller i en mapp som den lokala datorn kan komma åt.
När du använder den här parametern konverterar PowerShell innehållet i den angivna skriptfilen till ett skriptblock och kör skriptblocket som ett bakgrundsjobb.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InitializationScript
Anger kommandon som körs innan jobbet startar. Om du vill skapa ett skriptblock omsluter du kommandona i klammerparenteser ({}
).
Använd den här parametern för att förbereda sessionen där jobbet körs. Du kan till exempel använda den för att lägga till funktioner, snapin-moduler och moduler i sessionen.
Type: | ScriptBlock |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Anger indata till kommandot. Ange en variabel som innehåller objekten eller skriv ett kommando eller uttryck som genererar objekten.
I värdet för parametern ScriptBlock använder du den $input
automatiska variabeln för att representera indataobjekten.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-LiteralPath
Anger ett lokalt skript som den här cmdleten körs som ett bakgrundsjobb. Ange sökvägen till ett skript på den lokala datorn.
Start-Job
använder värdet för parametern LiteralPath exakt som den skrivs. Inga tecken tolkas som jokertecken. Om sökvägen innehåller escape-tecken omger du den inom enkla citattecken. Enkla citattecken säger till PowerShell att inte tolka några tecken som escape-sekvenser.
Type: | String |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
Anger ett eget namn för det nya jobbet. Du kan använda namnet för att identifiera jobbet för andra jobb-cmdletar, till exempel cmdleten Stop-Job
.
Standardnamnet är Job#
, där #
är ett ordningstal som ökas för varje jobb.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-PSVersion
Anger en version av PowerShell som ska användas för att köra jobbet. När värdet för PSVersion är 5.1 Körs jobbet i en Windows PowerShell 5.1-session. För andra värden körs jobbet med den aktuella versionen av PowerShell.
Den här parametern lades till i PowerShell 7 och fungerar bara i Windows.
Type: | Version |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RunAs32
Från och med PowerShell 7 fungerar inte RunAs32-parametern på 64-bitars PowerShell (pwsh
).
Om RunAs32 anges i 64-bitars PowerShell utlöser Start-Job
ett avslutande undantagsfel.
Om du vill starta en 32-bitars PowerShell-process (pwsh
) med RunAs32 måste du ha 32-bitars PowerShell installerat.
I 32-bitars PowerShell tvingar RunAs32 jobbet att köras i en 32-bitarsprocess, även på ett 64-bitars operativsystem.
När kommandot innehåller parametern RunAs32 i 64-bitarsversioner av Windows 7 och Windows Server 2008 R2 Start-Job
kan du inte använda parametern Credential för att ange en annan användares autentiseringsuppgifter.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ScriptBlock
Anger vilka kommandon som ska köras i bakgrundsjobbet. Om du vill skapa ett skriptblock omsluter du kommandona i klammerparenteser ({}
). Använd den $input
automatiska variabeln för att komma åt värdet för parametern InputObject . Den här parametern krävs.
Type: | ScriptBlock |
Aliases: | Command |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Type
Anger den anpassade typen för jobb som startas av Start-Job
. Ange ett anpassat jobbtypnamn, till exempel PSScheduledJob för schemalagda jobb eller PSWorkflowJob för arbetsflödesjobb. Den här parametern är inte giltig för standardbakgrundsjobb.
Den här parametern introducerades i PowerShell 3.0.
Type: | String |
Position: | 2 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WorkingDirectory
Anger den första arbetskatalogen för bakgrundsjobbet. Om parametern inte har angetts körs jobbet från standardplatsen. Standardplatsen är den aktuella arbetskatalogen för anroparen som startade jobbet.
Den här parametern introducerades i PowerShell 7.
Type: | String |
Position: | Named |
Default value: | $HOME on Unix (macOS, Linux) and $HOME\Documents on Windows |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Indata
Du kan använda pipelinen för att skicka ett objekt med egenskapen Namn till parametern Namn . Du kan till exempel skapa en pipeline för ett FileInfo-objekt från Get-ChildItem
till Start-Job
.
Utdata
System.Management.Automation.PSRemotingJob
Start-Job
returnerar ett PSRemotingJob-objekt som representerar jobbet som det startade.
Kommentarer
Om du vill köra i bakgrunden Start-Job
körs i en egen session i den aktuella sessionen. När du använder cmdleten Invoke-Command
för att köra ett Start-Job
kommando i en session på en fjärrdator Start-Job
körs i en session i fjärrsessionen.