Delen via


Start-Job

Hiermee start u een PowerShell-achtergrondtaak.

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>]
     [-FilePath] <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-Name <String>]
     [-Credential <PSCredential>]
     -LiteralPath <String>
     [-Authentication <AuthenticationMechanism>]
     [[-InitializationScript] <ScriptBlock>]
     [-RunAs32]
     [-PSVersion <Version>]
     [-InputObject <PSObject>]
     [-ArgumentList <Object[]>]
     [<CommonParameters>]
Start-Job
     [-VMGuid] <Guid[]>
     [<CommonParameters>]
Start-Job
     [-VMGuid] <Guid[]>
     [<CommonParameters>]
Start-Job
     -VMName <String[]>
     [<CommonParameters>]
Start-Job
     -VMName <String[]>
     [<CommonParameters>]

Description

De Start-Job cmdlet start een PowerShell-achtergrondtaak op de lokale computer.

Een PowerShell-achtergrondtaak voert een opdracht uit zonder interactie met de huidige sessie. Wanneer u een achtergrondtaak start, wordt een taakobject onmiddellijk geretourneerd, zelfs als het langer duurt voordat de taak is voltooid. U kunt zonder onderbreking in de sessie blijven werken terwijl de taak wordt uitgevoerd.

Het taakobject bevat nuttige informatie over de taak, maar bevat niet de taakresultaten. Wanneer de taak is voltooid, gebruikt u de Receive-Job cmdlet om de resultaten van de taak op te halen. Zie about_Jobs voor meer informatie over achtergrondtaken.

Als u een achtergrondtaak wilt uitvoeren op een externe computer, gebruikt u de parameter AsJob die beschikbaar is op veel cmdlets of gebruikt u de Invoke-Command cmdlet om een Start-Job opdracht uit te voeren op de externe computer. Zie about_Remote_Jobs voor meer informatie.

Vanaf PowerShell 3.0 Start-Job kunnen exemplaren van aangepaste taaktypen worden gestart, zoals geplande taken. Zie de Help-documenten voor de functie taaktype voor informatie over het starten Start-Job van taken met aangepaste typen.

Voorbeelden

Voorbeeld 1: Een achtergrondtaak starten

In dit voorbeeld wordt een taak gestart die op de achtergrond op de lokale computer wordt uitgevoerd.

Start-Job -ScriptBlock {Get-Process}

Id  Name   PSJobTypeName   State     HasMoreData   Location    Command
--  ----   -------------   -----     -----------   --------    -------
1   Job1   BackgroundJob   Running   True          localhost   Get-Process

Start-Job gebruikt de parameter ScriptBlock om als achtergrondtaak uit te voeren Get-Process . De taakgegevens worden weergegeven en PowerShell keert terug naar een prompt terwijl de taak op de achtergrond wordt uitgevoerd.

Voorbeeld 2: een taak starten met behulp van Invoke-Command

In dit voorbeeld wordt een taak uitgevoerd op meerdere computers. De taak wordt opgeslagen in een variabele en wordt uitgevoerd met behulp van de naam van de variabele op de PowerShell-opdrachtregel.

$jobWRM = Invoke-Command -ComputerName (Get-Content -Path C:\Servers.txt) -ScriptBlock {
   Get-Service -Name WinRM } -JobName WinRM -ThrottleLimit 16 -AsJob

Een taak die gebruikmaakt, Invoke-Command wordt gemaakt en opgeslagen in de $jobWRM variabele. Invoke-Command gebruikt de parameter ComputerName om de computers op te geven waarop de taak wordt uitgevoerd. Get-Content haalt de servernamen op uit het C:\Servers.txt bestand.

De parameter ScriptBlock geeft een opdracht op waarmee Get-Service de WinRM-service wordt opgehaald. De parameter JobName geeft een beschrijvende naam op voor de taak, WinRM. De parameter ThrottleLimit beperkt het aantal gelijktijdige opdrachten tot 16. Met de parameter AsJob wordt een achtergrondtaak gestart waarmee de opdracht op de servers wordt uitgevoerd.

Voorbeeld 3: taakgegevens ophalen

In dit voorbeeld wordt informatie opgehaald over een taak en worden de resultaten weergegeven van een voltooide taak die is uitgevoerd op de lokale computer.

$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 gebruikt de parameter ScriptBlock om een opdracht uit te voeren waarmee wordt opgegeven Get-WinEvent dat het systeemlogboek moet worden opgehaald. De referentieparameter geeft een domeingebruikersaccount op met machtigingen om de taak op de computer uit te voeren. Het taakobject wordt opgeslagen in de $j variabele.

Het object in de $j variabele wordt door de pijplijn verzonden naar Select-Object. De parameter Eigenschap geeft een sterretje (*) op om alle eigenschappen van het taakobject weer te geven.

Voorbeeld 4: Een script uitvoeren als achtergrondtaak

In dit voorbeeld wordt een script op de lokale computer uitgevoerd als een achtergrondtaak.

Start-Job -FilePath C:\Scripts\Sample.ps1

Start-Job gebruikt de FilePath-parameter om een scriptbestand op te geven dat is opgeslagen op de lokale computer.

Voorbeeld 5: Een proces ophalen met behulp van een achtergrondtaak

In dit voorbeeld wordt een achtergrondtaak gebruikt om een opgegeven proces op naam op te halen.

Start-Job -Name PShellJob -ScriptBlock { Get-Process -Name PowerShell }

Start-Job gebruikt de parameter Name om een beschrijvende taaknaam, PShellJob, op te geven. De parameter ScriptBlock geeft aan Get-Process om processen op te halen met de naam PowerShell.

Voorbeeld 6: gegevens verzamelen en opslaan met behulp van een achtergrondtaak

In dit voorbeeld wordt een taak gestart die een grote hoeveelheid kaartgegevens verzamelt en deze vervolgens opslaat in een .tif bestand.

Start-Job -Name GetMappingFiles -InitializationScript {Import-Module MapFunctions} -ScriptBlock {
   Get-Map -Name * | Set-Content -Path D:\Maps.tif } -RunAs32

Start-Job gebruikt de parameter Name om een beschrijvende taaknaam op te geven, GetMappingFiles. Met de parameter InitializationScript wordt een scriptblok uitgevoerd waarmee de MapFunctions-module wordt geïmporteerd. De parameter ScriptBlock wordt uitgevoerd Get-Map en Set-Content de gegevens worden opgeslagen op de locatie die is opgegeven door de parameter Path . De parameter RunAs32 voert het proces uit als 32-bits, zelfs op een 64-bits besturingssysteem.

Voorbeeld 7: invoer doorgeven aan een achtergrondtaak

In dit voorbeeld wordt de $input automatische variabele gebruikt om een invoerobject te verwerken. Gebruik Receive-Job om de uitvoer van de taak weer te geven.

Start-Job -ScriptBlock { Get-Content $input } -InputObject "C:\Servers.txt"
Receive-Job -Name Job45 -Keep

Server01
Server02
Server03
Server04

Start-Job gebruikt de parameter ScriptBlock om uit te voeren Get-Content met de $input automatische variabele. Met de $input variabele worden objecten opgehaald uit de parameter InputObject . Receive-Job gebruikt de parameter Name om de taak op te geven en voert de resultaten uit. Met de parameter Keep wordt de taakuitvoer opgeslagen, zodat deze opnieuw kan worden weergegeven tijdens de PowerShell-sessie.

Parameters

-ArgumentList

Hiermee geeft u een matrix van argumenten, of parameterwaarden, voor het script dat is opgegeven door de FilePath parameter .

Omdat alle waarden die volgen op de parameternaam ArgumentList worden geïnterpreteerd als waarden van ArgumentList, geeft u deze parameter op als de laatste parameter in de opdracht.

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Authentication

Hiermee geeft u het mechanisme op dat wordt gebruikt voor het verifiëren van gebruikersreferenties.

De acceptabele waarden voor deze parameter zijn als volgt:

  • Standaard
  • Basic
  • Credssp
  • Samenvatting
  • Kerberos
  • Negotiate
  • NegotiateWithImplicitCredential

De standaardwaarde is Standaard.

CredSSP-verificatie is alleen beschikbaar in Windows Vista, Windows Server 2008 en latere versies van het Windows-besturingssysteem.

Zie AuthenticationMechanism voor meer informatie over de waarden van deze parameter.

Waarschuwing

CredSSP-verificatie (Credential Security Support Provider), waarbij de referenties van de gebruiker worden doorgegeven aan een externe computer om te worden geverifieerd, is ontworpen voor opdrachten waarvoor verificatie op meer dan één resource is vereist, zoals toegang tot een externe netwerkshare. Dit mechanisme verhoogt het beveiligingsrisico van de externe bewerking. Als de externe computer is gecompromitteerd, kunnen de referenties die aan de computer worden doorgegeven, worden gebruikt om de netwerksessie te beheren.

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

Hiermee geeft u een gebruikersaccount op dat gemachtigd is om deze actie uit te voeren. Als de referentieparameter niet is opgegeven, gebruikt de opdracht de referenties van de huidige gebruiker.

Typ een gebruikersnaam, zoals User01 of Domain01\User01, of voer een PSCredential-object in, zoals een object van de Get-Credential cmdlet.

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DefinitionName

Hiermee geeft u de definitienaam van de taak die deze cmdlet start. Gebruik deze parameter om aangepaste taaktypen te starten die een definitienaam hebben, zoals geplande taken.

Wanneer u gebruikt Start-Job om een exemplaar van een geplande taak te starten, wordt de taak onmiddellijk gestart, ongeacht de taaktriggers of taakopties. Het resulterende taakexemplaren is een geplande taak, maar deze wordt niet op schijf opgeslagen, zoals geactiveerde geplande taken. U kunt de parameter Start-JobArgumentList van niet gebruiken om waarden op te geven voor parameters van scripts die worden uitgevoerd in een geplande taak. Zie about_Scheduled_Jobs voor meer informatie.

Deze parameter is geïntroduceerd in PowerShell 3.0.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-DefinitionPath

Hiermee geeft u het pad op van de definitie voor de taak die door deze cmdlet wordt gestart. Voer het pad naar de definitie in. De samenvoeging van de waarden van de parameters DefinitionPath en DefinitionName is het volledig gekwalificeerde pad van de taakdefinitie. Gebruik deze parameter om aangepaste taaktypen te starten die een definitiepad hebben, zoals geplande taken.

Voor geplande taken is $home\AppData\Local\Windows\PowerShell\ScheduledJobde waarde van de Parameter DefinitionPath .

Deze parameter is geïntroduceerd in PowerShell 3.0.

Type:String
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

Hiermee geeft u een lokaal script dat Start-Job wordt uitgevoerd als een achtergrondtaak. Voer het pad en de bestandsnaam van het script in of gebruik de pijplijn om een scriptpad naar te Start-Jobverzenden. Het script moet zich op de lokale computer bevinden of in een map waartoe de lokale computer toegang heeft.

Wanneer u deze parameter gebruikt, converteert PowerShell de inhoud van het opgegeven scriptbestand naar een scriptblok en wordt het scriptblok als achtergrondtaak uitgevoerd.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-InitializationScript

Hiermee geeft u opdrachten op die worden uitgevoerd voordat de taak wordt gestart. Als u een scriptblok wilt maken, plaatst u de opdrachten tussen accolades ({}).

Gebruik deze parameter om de sessie voor te bereiden waarin de taak wordt uitgevoerd. U kunt het bijvoorbeeld gebruiken om functies, modules en modules toe te voegen aan de sessie.

Type:ScriptBlock
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Hiermee geeft u invoer voor de opdracht. Voer een variabele in die de objecten bevat of typ een opdracht of expressie waarmee de objecten worden gegenereerd.

Gebruik in de waarde van de parameter ScriptBlock de $input automatische variabele om de invoerobjecten weer te geven.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

Hiermee geeft u een lokaal script op dat door deze cmdlet als achtergrondtaak wordt uitgevoerd. Voer het pad van een script op de lokale computer in.

Start-Job gebruikt de waarde van de Parameter LiteralPath precies zoals deze is getypt. Er worden geen tekens geïnterpreteerd als jokertekens. Als het pad escape-tekens bevat, plaatst u het tussen enkele aanhalingstekens. Enkele aanhalingstekens geven PowerShell aan dat geen tekens als escape-reeksen worden geïnterpreteerd.

Type:String
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Name

Hiermee geeft u een beschrijvende naam voor de nieuwe taak. U kunt de naam gebruiken om de taak te identificeren met andere taak-cmdlets, zoals de Stop-Job cmdlet.

De standaard beschrijvende naam is Job#, waarbij # een rangnummer is dat voor elke taak wordt verhoogd.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-PSVersion

Hiermee geeft u een versie. Start-Job voert de taak uit met de versie van PowerShell. De acceptabele waarden voor deze parameter zijn: 2.0 en 3.0.

Deze parameter is geïntroduceerd in PowerShell 3.0.

Type:Version
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RunAs32

Geeft aan dat Start-Job de taak wordt uitgevoerd in een 32-bits proces. RunAs32 dwingt de taak uit te voeren in een 32-bits proces, zelfs op een 64-bits besturingssysteem.

In 64-bits versies van Windows 7 en Windows Server 2008 R2, wanneer de Start-Job opdracht de parameter RunAs32 bevat, kunt u de referentieparameter niet gebruiken om de referenties van een andere gebruiker op te geven.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

Hiermee geeft u de opdrachten die moeten worden uitgevoerd in de achtergrondtaak. Als u een scriptblok wilt maken, plaatst u de opdrachten tussen accolades ({}). Gebruik de $input automatische variabele om toegang te krijgen tot de waarde van de parameter InputObject . Deze parameter is vereist.

Type:ScriptBlock
Aliases:Command
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Type

Hiermee geeft u het aangepaste type op voor taken die zijn gestart door Start-Job. Voer een aangepaste taaktypenaam in, zoals PSScheduledJob voor geplande taken of PSWorkflowJob voor werkstroomtaken. Deze parameter is niet geldig voor standaard achtergrondtaken.

Deze parameter is geïntroduceerd in PowerShell 3.0.

Type:String
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Invoerwaarden

String

U kunt de pijplijn gebruiken om een object met de eigenschap Name naar de parameter Name te verzenden. U kunt bijvoorbeeld een FileInfo-object pijplijnen van Get-ChildItem naar Start-Job.

Uitvoerwaarden

System.Management.Automation.PSRemotingJob

Start-Job retourneert een PSRemotingJob-object dat de taak vertegenwoordigt die is gestart.

Notities

Als u op de achtergrond wilt uitvoeren, Start-Job wordt uitgevoerd in een eigen sessie in de huidige sessie. Wanneer u de Invoke-Command cmdlet gebruikt om een Start-Job opdracht uit te voeren in een sessie op een externe computer, Start-Job wordt uitgevoerd in een sessie in de externe sessie.