Szukaj…


Wprowadzenie

Zadania zostały wprowadzone w PowerShell 2.0 i pomogły rozwiązać problem związany z narzędziami wiersza poleceń. Krótko mówiąc, jeśli rozpoczniesz długo działające zadanie, monit nie będzie dostępny, dopóki zadanie się nie zakończy. Jako przykład długotrwałego zadania pomyśl o tym prostym poleceniu PowerShell:

Get-ChildItem -Path c: \ -Recurse

Pobieranie pełnej listy katalogów z dysku C: zajmie trochę czasu. Jeśli uruchomisz go jako Job, konsola odzyska kontrolę i możesz przechwycić wynik później.

Uwagi

Zadania PowerShell działają w nowym procesie. Ma to wady i zalety, które są ze sobą powiązane.

Plusy:

  1. Zadanie przebiega w czystym procesie, w tym w środowisku.
  2. Zadanie może działać asynchronicznie z głównym procesem programu PowerShell

Cons:

  1. Zmiany środowiska procesowego nie będą obecne w zadaniu.
  2. Parametry przekazywane i zwracane wyniki są serializowane.
    • Oznacza to, że jeśli zmienisz obiekt parametru podczas działania zadania, nie zostanie to odzwierciedlone w zadaniu.
    • Oznacza to również, że jeśli obiekt nie może zostać zserializowany, nie można go przekazać ani zwrócić (chociaż PowerShell może skopiować dowolne parametry i przekazać / zwrócić obiekt PSObject).

Podstawowe tworzenie miejsc pracy

Uruchom blok skryptu jako zadanie w tle:

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

Uruchom skrypt jako zadanie w tle:

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

Uruchom zadanie za pomocą Invoke-Command na zdalnym komputerze:

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

Rozpocznij pracę jako inny użytkownik (Monituje o hasło):

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

Lub

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

Rozpocznij pracę jako inny użytkownik (bez monitu):

$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

Podstawowe zarządzanie zadaniami

Uzyskaj listę wszystkich zadań w bieżącej sesji:

Get-Job

Oczekiwanie na zakończenie pracy przed uzyskaniem wyniku:

$job | Wait-job | Receive-Job 

Przekrocz limit czasu zadania, jeśli trwa ono zbyt długo (w tym przykładzie 10 sekund)

$job | Wait-job -Timeout 10

Zatrzymywanie zadania (wykonuje wszystkie zadania oczekujące w tej kolejce zadań przed zakończeniem):

$job | Stop-Job 

Usuń zadanie z listy zadań w tle bieżącej sesji:

$job | Remove-Job

Uwaga : Poniższe będzie działać tylko w przypadku zadań Workflow pracy.

Zawieś zadanie Workflow pracy (pauza):

$job | Suspend-Job 

Wznów zadanie Workflow pracy:

$job | Resume-Job 


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow