Sök…


Introduktion

Jobb introducerades i PowerShell 2.0 och hjälpte till att lösa ett problem som ingår i kommandoradsverktygen. I ett nötskal, om du startar en lång körning, är din prompt inte tillgänglig tills uppgiften är klar. Tänk på detta enkla PowerShell-kommando som ett exempel på en långvarig uppgift:

Get-ChildItem-path c: \ -Recurse

Det tar lite tid att hämta en fullständig kataloglista över din C: -enhet. Om du kör det som Jobb kommer konsolen att få tillbaka kontrollen och du kan fånga resultatet senare.

Anmärkningar

PowerShell Jobs körs i en ny process. Detta har för- och nackdelar som är relaterade.

Fördelar:

  1. Jobbet körs i en ren process, inklusive miljö.
  2. Jobbet kan köras asynkront till din huvudsakliga PowerShell-process

Nackdelar:

  1. Processmiljöändringar kommer inte att finnas i jobbet.
  2. Parametrarna passerar till och returnerade resultat seriellt.
    • Detta innebär att om du ändrar ett parameterobjekt medan jobbet körs kommer det inte att återspeglas i jobbet.
    • Detta betyder också att om ett objekt inte kan serialiseras kan du inte skicka eller returnera det (även om PowerShell kan kopiera alla parametrar och skicka / returnera ett PSObject.)

Grundläggande jobbskapande

Starta ett skriptblock som bakgrundsjobb:

$job = Start-Job -ScriptBlock {Get-Process}

Starta ett skript som bakgrundsjobb:

$job = Start-Job -FilePath "C:\YourFolder\Script.ps1"

Starta ett jobb med Invoke-Command på en fjärrmaskin:

$job = Invoke-Command -ComputerName "ComputerName" -ScriptBlock {Get-Service winrm} -JobName "WinRM" -ThrottleLimit 16 -AsJob

Börja jobbet som en annan användare (Ber om lösenord):

Start-Job -ScriptBlock {Get-Process} -Credential "Domain\Username"

Eller

Start-Job -ScriptBlock {Get-Process} -Credential (Get-Credential)

Börja jobbet som en annan användare (Ingen fråga):

$username = "Domain\Username" 
$password = "password"
$secPassword = ConvertTo-SecureString -String $password -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username, $secPassword)
Start-Job -ScriptBlock {Get-Process} -Credential $credentials

Grundläggande jobbhantering

Få en lista över alla jobb under den aktuella sessionen:

Get-Job

Väntar på att jobbet ska slutföras innan resultatet blir:

$job | Wait-job | Receive-Job 

Timeout ett jobb om det går för länge (10 sekunder i det här exemplet)

$job | Wait-job -Timeout 10

Stoppa ett jobb (slutför alla uppgifter som väntar i den jobbkön innan du slutar):

$job | Stop-Job 

Ta bort jobbet från den aktuella sessionens lista över bakgrundsjobb:

$job | Remove-Job

Obs : Följande fungerar bara på Workflow .

Stäng av ett Workflow (paus):

$job | Suspend-Job 

Återuppta ett Workflow :

$job | Resume-Job 


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow