Zoeken…


Invoering

Jobs werden geïntroduceerd in PowerShell 2.0 en hielpen bij het oplossen van een probleem dat inherent was aan de opdrachtregelprogramma's. Kortom, als u een langlopende taak start, is uw prompt niet beschikbaar totdat de taak is voltooid. Denk als een voorbeeld van een langlopende taak aan deze eenvoudige PowerShell-opdracht:

Get-ChildItem -Path c: \ -Recurse

Het duurt even voordat de volledige directorylijst van uw C: -station is opgehaald. Als u het als Job uitvoert, krijgt de console de controle terug en kunt u het resultaat later vastleggen.

Opmerkingen

PowerShell Jobs worden in een nieuw proces uitgevoerd. Dit heeft voor- en nadelen die gerelateerd zijn.

Voors:

  1. De taak wordt in een schoon proces uitgevoerd, inclusief de omgeving.
  2. De taak kan asynchroon worden uitgevoerd met uw hoofd PowerShell-proces

nadelen:

  1. Wijzigingen in de procesomgeving zijn niet aanwezig in de taak.
  2. Parameters worden doorgegeven en geretourneerde resultaten worden geserialiseerd.
    • Dit betekent dat als u een parameterobject wijzigt terwijl de taak wordt uitgevoerd, dit niet wordt weerspiegeld in de taak.
    • Dit betekent ook dat als een object niet kan worden geserialiseerd, u het niet kunt passeren of retourneren (hoewel PowerShell parameters mag kopiëren en een PSObject kan passeren / retourneren.)

Basis banen creëren

Start een scriptblok als achtergrondtaak:

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

Start een script als achtergrondtaak:

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

Start een taak met Invoke-Command op een externe machine:

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

Start taak als een andere gebruiker (vraagt om wachtwoord):

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

Of

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

Start taak als een andere gebruiker (geen prompt):

$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

Eenvoudig taakbeheer

Ontvang een lijst met alle taken in de huidige sessie:

Get-Job

Wachten op een taak om te voltooien voordat het resultaat wordt verkregen:

$job | Wait-job | Receive-Job 

Time-out van een taak als deze te lang duurt (in dit voorbeeld 10 seconden)

$job | Wait-job -Timeout 10

Een taak stoppen (voltooit alle taken die in de wachtrij staan voordat ze worden beëindigd):

$job | Stop-Job 

Taak verwijderen uit de achtergrondtakenlijst van de huidige sessie:

$job | Remove-Job

Opmerking : het volgende werkt alleen op Workflow .

Een Workflow taak onderbreken (pauze):

$job | Suspend-Job 

Een Workflow taak hervatten:

$job | Resume-Job 


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow