Wait-Job
Czeka, aż jedno lub wszystkie zadania programu PowerShell uruchomione w sesji będą w stanie zakończenia.
Składnia
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Id] <Int32[]>
[<CommonParameters>]
Wait-Job
[-Job] <Job[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Name] <String[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-InstanceId] <Guid[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-State] <JobState>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Filter] <Hashtable>
[<CommonParameters>]
Opis
Polecenie Wait-Job
cmdlet czeka, aż zadanie będzie w stanie zakończenia przed kontynuowaniem wykonywania.
Stany zakończenia to:
- Ukończone
- Niepowodzenie
- Zatrzymano
- Suspended
- Odłączony
Możesz poczekać, aż określone zadanie lub wszystkie zadania będą w stanie zakończenia. Możesz również ustawić maksymalny czas oczekiwania dla zadania przy użyciu parametru Limit czasu lub użyć parametru Force , aby poczekać na zadanie w Suspended
stanach lub Disconnected
.
Gdy polecenia w zadaniu zostaną ukończone, Wait-Job
zwraca obiekt zadania i kontynuuje wykonywanie.
Możesz użyć Wait-Job
polecenia cmdlet , aby poczekać na uruchomienie zadań przy użyciu Start-Job
polecenia cmdlet lub parametru Invoke-Command
AsJob polecenia cmdlet. Aby uzyskać więcej informacji na temat zadań, zobacz about_Jobs.
Począwszy od Windows PowerShell 3.0, Wait-Job
polecenie cmdlet oczekuje również na niestandardowe typy zadań, takie jak zadania przepływu pracy i wystąpienia zaplanowanych zadań. Aby umożliwić Wait-Job
oczekiwanie na zadania określonego typu, zaimportuj moduł obsługujący typ zadania niestandardowego do sesji przed uruchomieniem Get-Job
polecenia cmdlet przy użyciu polecenia cmdlet lub przy użyciu Import-Module
polecenia cmdlet lub otrzymaniu polecenia cmdlet w module. Aby uzyskać informacje na temat określonego niestandardowego typu zadania, zobacz dokumentację funkcji niestandardowego typu zadania.
Przykłady
Przykład 1. Oczekiwanie na wszystkie zadania
Get-Job | Wait-Job
To polecenie czeka na zakończenie wszystkich zadań uruchomionych w sesji.
Przykład 2. Oczekiwanie na uruchomienie zadań na komputerach zdalnych przy użyciu Start-Job
$s = New-PSSession Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
$done.Count
3
W tym przykładzie pokazano, jak używać Wait-Job
polecenia cmdlet z zadaniami uruchomionymi na komputerach zdalnych przy użyciu Start-Job
polecenia cmdlet . Polecenia Start-Job
i Wait-Job
są przesyłane do komputera zdalnego przy użyciu Invoke-Command
polecenia cmdlet .
W tym przykładzie użyto Wait-Job
polecenia do określenia, czy Get-Date
polecenie uruchomione jako zadanie na trzech różnych komputerach zostało zakończone.
Pierwsze polecenie tworzy sesję Windows PowerShell (PSSession) na każdym z trzech komputerów zdalnych i przechowuje je w zmiennej $s
.
Drugie polecenie używa Invoke-Command
polecenia do uruchomienia Start-Job
w każdej z trzech sesji w pliku $s
.
Wszystkie zadania mają nazwę Date1.
Trzecie polecenie używa Invoke-Command
polecenia do uruchomienia polecenia Wait-Job
. To polecenie czeka na Date1
zakończenie zadań na każdym komputerze. Przechowuje ona wynikową kolekcję (tablicę) obiektów zadań w zmiennej $done
.
Czwarte polecenie używa właściwości Count tablicy obiektów zadań w zmiennej $done
, aby określić, ile zadań zostało zakończonych.
Przykład 3. Określanie, kiedy pierwsze zadanie zostanie zakończone
$s = New-PSSession (Get-Content Machines.txt)
$c = 'Get-EventLog -LogName System | where {$_.EntryType -eq "error" --and $_.Source -eq "LSASRV"} | Out-File Errors.txt'
Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}
W tym przykładzie użyto parametru Any parametru Wait-Job
, aby określić, kiedy pierwszy z wielu zadań uruchomionych w bieżącej sesji jest w stanie zakończenia. Pokazano również, jak za pomocą Wait-Job
polecenia cmdlet czekać na zakończenie zadań zdalnych.
Pierwsze polecenie tworzy pssession na każdym z komputerów wymienionych w pliku Machines.txt i przechowuje obiekty PSSession w zmiennej $s
. Polecenie używa Get-Content
polecenia cmdlet , aby pobrać zawartość pliku. Polecenie Get-Content
jest ujęte w nawiasy, aby upewnić się, że jest ono uruchamiane przed poleceniem New-PSSession
.
Drugie polecenie przechowuje ciąg polecenia w cudzysłowie Get-EventLog
w zmiennej $c
.
Trzecie polecenie używa Invoke-Command
polecenia cmdlet do uruchomienia Start-Job
w każdej sesji w programie $s
.
Polecenie Start-Job
uruchamia zadanie, które uruchamia Get-EventLog
polecenie w zmiennej $c
.
Polecenie używa modyfikatora zakresu using , aby wskazać, że zmienna $c
została zdefiniowana na komputerze lokalnym. Modyfikator zakresu Using jest wprowadzany w Windows PowerShell 3.0. Aby uzyskać więcej informacji na temat modyfikatora zakresu , zobacz about_Remote_Variables.
Czwarte polecenie używa Invoke-Command
polecenia do uruchomienia Wait-Job
polecenia w sesjach. Używa parametru Any do oczekiwania na pierwsze zadanie na komputerach zdalnych stanu zakończenia.
Przykład 4. Ustawianie czasu oczekiwania dla zadań na komputerach zdalnych
PS> $s = New-PSSession Server01, Server02, Server03
PS> $jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
PS> $done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
PS>
W tym przykładzie pokazano, jak za pomocą parametru Wait-Job
Limit czasu ustawić maksymalny czas oczekiwania dla zadań uruchomionych na komputerach zdalnych.
Pierwsze polecenie tworzy pssession na każdym z trzech komputerów zdalnych (Server01, Server02 i Server03), a następnie przechowuje obiekty PSSession w zmiennej $s
.
Drugie polecenie używa Invoke-Command
polecenia do uruchomienia Start-Job
w każdym z obiektów PSSession w .$s
Przechowuje wynikowe obiekty zadań w zmiennej $jobs
.
Trzecie polecenie używa Invoke-Command
polecenia do uruchomienia Wait-Job
w każdej sesji w pliku $s
. Polecenie Wait-Job
określa, czy wszystkie polecenia zostały ukończone w ciągu 30 sekund. Używa parametru Limit czasu z wartością 30, aby ustanowić maksymalny czas oczekiwania, a następnie zapisuje wyniki polecenia w zmiennej $done
.
W tym przypadku po 30 sekundach zostało ukończone tylko polecenie na komputerze Server02. Wait-Job
kończy oczekiwanie, zwraca obiekt reprezentujący zadanie, które zostało ukończone, i wyświetla wiersz polecenia.
Zmienna $done
zawiera obiekt zadania, który reprezentuje zadanie uruchomione na serwerze Server02.
Przykład 5. Poczekaj na zakończenie jednego z kilku zadań
Wait-Job -id 1,2,5 -Any
To polecenie identyfikuje trzy zadania według ich identyfikatorów i czeka, aż dowolny z nich będzie w stanie zakończenia. Wykonanie jest kontynuowane po zakończeniu pierwszego zadania.
Przykład 6: Poczekaj na okres, a następnie zezwól na kontynuowanie zadania w tle
Wait-Job -Name "DailyLog" -Timeout 120
To polecenie czeka 120 sekund (dwie minuty) na zakończenie zadania DailyLog. Jeśli zadanie nie zostanie zakończone w ciągu najbliższych dwóch minut, wykonanie będzie kontynuowane, a zadanie będzie nadal działać w tle.
Przykład 7. Oczekiwanie na zadanie według nazwy
Wait-Job -Name "Job3"
To polecenie używa nazwy zadania, aby zidentyfikować zadanie, dla którego należy czekać.
Przykład 8. Oczekiwanie na zadania na komputerze lokalnym rozpoczęte z Start-Job
$j = Start-Job -ScriptBlock {Get-ChildItem *.ps1| where {$_.lastwritetime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job
W tym przykładzie pokazano, jak używać Wait-Job
polecenia cmdlet z zadaniami uruchomionymi na komputerze lokalnym przy użyciu polecenia Start-Job
.
Te polecenia uruchamiają zadanie, które pobiera Windows PowerShell pliki skryptów, które zostały dodane lub zaktualizowane w ostatnim tygodniu.
Pierwsze polecenie służy Start-Job
do uruchamiania zadania na komputerze lokalnym. Zadanie uruchamia Get-ChildItem
polecenie, które pobiera wszystkie pliki z rozszerzeniem nazwy pliku .ps1, które zostały dodane lub zaktualizowane w ostatnim tygodniu.
Trzecie polecenie używa Wait-Job
polecenia do oczekiwania, aż zadanie będzie w stanie zakończenia. Po zakończeniu zadania polecenie wyświetla obiekt zadania, który zawiera informacje o zadaniu.
Przykład 9. Oczekiwanie na uruchomienie zadań na komputerach zdalnych przy użyciu Invoke-Command
$s = New-PSSession Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job
W tym przykładzie pokazano, jak używać zadań Wait-Job
uruchomionych na komputerach zdalnych przy użyciu parametru AsJob polecenia Invoke-Command
. W przypadku korzystania z zadania AsJob zadanie jest tworzone na komputerze lokalnym, a wyniki są automatycznie zwracane na komputer lokalny, mimo że zadanie jest uruchamiane na komputerach zdalnych.
W tym przykładzie użyto Wait-Job
metody do określenia, czy Get-Process
polecenie uruchomione w sesjach na trzech komputerach zdalnych jest w stanie zakończenia.
Pierwsze polecenie tworzy obiekty PSSession na trzech komputerach i przechowuje je w zmiennej $s
.
Drugie polecenie używa Invoke-Command
polecenia do uruchomienia Get-Process
w każdej z trzech sesji w pliku $s
.
Polecenie używa parametru AsJob , aby uruchomić polecenie asynchronicznie jako zadanie. Polecenie zwraca obiekt zadania, podobnie jak zadania uruchomione przy użyciu polecenia Start-Job
, a obiekt zadania jest przechowywany w zmiennej $j
.
Trzecie polecenie używa operatora potoku (|
), aby wysłać obiekt zadania do $j
Wait-Job
polecenia cmdlet . Polecenie Invoke-Command
nie jest wymagane w tym przypadku, ponieważ zadanie znajduje się na komputerze lokalnym.
Przykład 10: Oczekiwanie na zadanie o identyfikatorze
Get-Job
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Completed True localhost,Server01.. get-service
4 Job4 Completed True localhost dir | where
Wait-Job -Id 1
To polecenie czeka na zadanie z wartością identyfikatora 1.
Parametry
-Any
Wskazuje, że to polecenie cmdlet zwraca obiekt zadania i kontynuuje wykonywanie po zakończeniu zadania. Domyślnie czeka na Wait-Job
ukończenie wszystkich określonych zadań przed wyświetleniem monitu.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Filter
Określa tabelę skrótów warunków. To polecenie cmdlet czeka na zadania spełniające wszystkie warunki w tabeli skrótów. Wprowadź tabelę skrótów, w której klucze są właściwościami zadania, a wartości są wartościami właściwości zadania.
Ten parametr działa tylko w przypadku niestandardowych typów zadań, takich jak zadania przepływu pracy i zaplanowane zadania. Nie działa w przypadku standardowych zadań, takich jak te utworzone przy użyciu Start-Job
polecenia cmdlet . Aby uzyskać informacje o obsłudze tego parametru, zobacz temat pomocy dla typu zadania.
Ten parametr został wprowadzony w Windows PowerShell 3.0.
Type: | Hashtable |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Force
Wskazuje, że to polecenie cmdlet nadal czeka na zadania w stanie Wstrzymanie lub Rozłączenie. Domyślnie Wait-Job
funkcja zwraca lub kończy oczekiwanie, gdy zadania znajdują się w jednym z następujących stanów:
- Ukończone
- Niepowodzenie
- Zatrzymano
- Suspended
- Odłączony
Ten parametr został wprowadzony w Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Id
Określa tablicę identyfikatorów zadań, dla których to polecenie cmdlet czeka.
Identyfikator jest liczbą całkowitą, która jednoznacznie identyfikuje zadanie w bieżącej sesji. Łatwiej jest zapamiętać i wpisać identyfikator wystąpienia, ale jest on unikatowy tylko w bieżącej sesji. Możesz wpisać jeden lub więcej identyfikatorów rozdzielonych przecinkami. Aby znaleźć identyfikator zadania, wpisz Get-Job
.
Type: | Int32[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-InstanceId
Określa tablicę identyfikatorów wystąpień zadań, dla których to polecenie cmdlet oczekuje. Wartość domyślna to wszystkie zadania.
Identyfikator wystąpienia to identyfikator GUID, który jednoznacznie identyfikuje zadanie na komputerze. Aby znaleźć identyfikator wystąpienia zadania, użyj polecenia Get-Job
.
Type: | Guid[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Job
Określa zadania, dla których to polecenie cmdlet czeka. Wprowadź zmienną zawierającą obiekty zadania lub polecenie, które pobiera obiekty zadania. Do wysyłania obiektów zadań do polecenia cmdlet można również użyć operatora potoku Wait-Job
. Domyślnie Wait-Job
czeka na wszystkie zadania utworzone w bieżącej sesji.
Type: | Job[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Name
Określa przyjazne nazwy zadań, dla których to polecenie cmdlet czeka.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-State
Określa stan zadania. To polecenie cmdlet czeka tylko na zadania w określonym stanie. Dopuszczalne wartości dla tego parametru to:
- Niestartowane
- Uruchomienie
- Ukończone
- Niepowodzenie
- Zatrzymano
- Zablokowane
- Suspended
- Odłączony
- Zawieszanie
- Zatrzymywanie
Aby uzyskać więcej informacji na temat stanów zadań, zobacz JobState Enumeration (Wyliczenie JobState).
Type: | JobState |
Accepted values: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Timeout
Określa maksymalny czas oczekiwania dla każdego zadania w sekundach. Wartość domyślna -1 wskazuje, że polecenie cmdlet czeka na zakończenie zadania. Czas rozpoczyna się po przesłaniu Wait-Job
polecenia, a nie Start-Job
polecenia.
Jeśli ten czas zostanie przekroczony, zakończenie oczekiwania i wykonanie będzie kontynuowane, nawet jeśli zadanie jest nadal uruchomione. Polecenie nie wyświetla żadnego komunikatu o błędzie.
Type: | Int32 |
Aliases: | TimeoutSec |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Dane wejściowe
System.Management.Automation.RemotingJob
Do tego polecenia cmdlet można przekazać obiekt zadania.
Dane wyjściowe
System.Management.Automation.PSRemotingJob
To polecenie cmdlet zwraca obiekty zadań, które reprezentują zadania w stanie zakończenia. Jeśli oczekiwanie kończy się z powodu przekroczenia wartości parametru Limit czasu , Wait-Job
nie zwraca żadnych obiektów.
Uwagi
Domyślnie Wait-Job
funkcja zwraca lub kończy oczekiwanie, gdy zadania znajdują się w jednym z następujących stanów:
- Ukończone
- Niepowodzenie
- Zatrzymano
- Suspended
- Odłączony
Wait-Job
Aby kontynuować oczekiwanie na wstrzymane i rozłączone zadania, użyj parametruForce.