PowerShell
PowerShell Bakgrundsjobb
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:
- Jobbet körs i en ren process, inklusive miljö.
- Jobbet kan köras asynkront till din huvudsakliga PowerShell-process
Nackdelar:
- Processmiljöändringar kommer inte att finnas i jobbet.
- 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