PowerShell
Zadania w tle PowerShell
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:
- Zadanie przebiega w czystym procesie, w tym w środowisku.
- Zadanie może działać asynchronicznie z głównym procesem programu PowerShell
Cons:
- Zmiany środowiska procesowego nie będą obecne w zadaniu.
- 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