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
- Zatrzymana
- 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 programu 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 niestandardowy typ zadania do sesji przed uruchomieniem Get-Job
polecenia cmdlet za pomocą Import-Module
polecenia cmdlet lub polecenia cmdlet lub 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 zadania uruchamiania
$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 Wait-Job
pokazano, jak używać polecenia cmdlet z zadaniami uruchomionymi na komputerach zdalnych przy użyciu Start-Job
polecenia cmdlet . Oba Start-Job
polecenia i Wait-Job
są przesyłane do komputera zdalnego przy użyciu Invoke-Command
polecenia cmdlet .
W tym przykładzie użyto Wait-Job
metody w celu określenia, czy Get-Date
polecenie uruchomione jako zadanie na trzech różnych komputerach zostało zakończone.
Pierwsze polecenie tworzy sesję programu Windows PowerShell (PSSession) na każdym z trzech komputerów zdalnych i zapisuje je w zmiennej $s
.
Drugie polecenie używa Invoke-Command
polecenia do uruchomienia Start-Job
w każdej z trzech sesji w programie $s
.
Wszystkie zadania mają nazwę Date1.
Trzecie polecenie używa Invoke-Command
polecenia do uruchomienia Wait-Job
polecenia . To polecenie czeka na Date1
zakończenie zadań na każdym komputerze. Przechowuje w zmiennej $done
wynikową kolekcję (tablicę) obiektów zadań.
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 -ComputerName (Get-Content -Path .\Machines.txt)
$c = 'Get-EventLog -LogName System | Where-Object {$PSItem.EntryType -eq "error" --and $PSItem.Source -eq "LSASRV"} | Out-File -FilePath 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 do pobrania zawartości 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 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 używanie zakresu jest wprowadzany w programie 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 , aby poczekać, aż pierwsze zadanie na komputerach zdalnych kończy stan.
Przykład 4. Ustawianie czasu oczekiwania dla zadań na komputerach zdalnych
PS> $s = New-PSSession -ComputerName 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 użyć parametru Wait-Job
Limit czasu, aby 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 uruchamiania Start-Job
w każdym z obiektów PSSession w pliku $s
. Przechowuje wynikowe obiekty zadań w zmiennej $jobs
.
Trzecie polecenie używa Invoke-Command
polecenia do uruchamiania Wait-Job
w każdej sesji w programie $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 upływie 30 sekund tylko polecenie na komputerze Server02 zostało ukończone. 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 ma być czekane.
Przykład 8. Oczekiwanie na zadania na komputerze lokalnym rozpoczęte przy użyciu zadania uruchamiania
$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1| Where-Object {$PSItem.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 pliki skryptów programu Windows PowerShell, które zostały dodane lub zaktualizowane w zeszłym tygodniu.
Pierwsze polecenie używa Start-Job
polecenia do uruchomienia 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 , aby poczekać, 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 polecenia Invoke-Command
$s = New-PSSession -ComputerName 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 do komputera lokalnego, 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 programie $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 Wait-Job
czeka na ukończenie wszystkich określonych zadań przed wyświetleniem monitu.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Filter
Określa tabelę skrótów warunków. To polecenie cmdlet oczekuje 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 programie Windows PowerShell 3.0.
Typ: | Hashtable |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-Force
Wskazuje, że to polecenie cmdlet nadal czeka na zadania w stanie Zawieszone lub Rozłączone. Domyślnie Wait-Job
zwraca lub kończy oczekiwanie, gdy zadania znajdują się w jednym z następujących stanów:
- Ukończone
- Niepowodzenie
- Zatrzymana
- Suspended
- Odłączony
Ten parametr został wprowadzony w programie Windows PowerShell 3.0.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Id
Określa tablicę identyfikatorów zadań, dla których to polecenie cmdlet oczekuje.
Identyfikator jest liczbą całkowitą, która jednoznacznie identyfikuje zadanie w bieżącej sesji. Łatwiej jest zapamiętać i wpisać niż identyfikator wystąpienia, ale jest on unikatowy tylko w bieżącej sesji. Można wpisać jeden lub więcej identyfikatorów rozdzielonych przecinkami. Aby znaleźć identyfikator zadania, wpisz Get-Job
.
Typ: | Int32[] |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | 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
.
Typ: | Guid[] |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | 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. Możesz również użyć operatora potoku do wysyłania obiektów zadań do Wait-Job
polecenia cmdlet. Domyślnie Wait-Job
czeka na wszystkie zadania utworzone w bieżącej sesji.
Typ: | Job[] |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-Name
Określa przyjazne nazwy zadań, dla których to polecenie cmdlet czeka.
Typ: | String[] |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-State
Określa stan zadania. To polecenie cmdlet oczekuje tylko na zadania w określonym stanie. Dopuszczalne wartości tego parametru to:
- Nierozpoczęte
- Uruchomiono
- Ukończone
- Niepowodzenie
- Zatrzymana
- Zablokowano
- Suspended
- Odłączony
- Zawieszanie
- Zatrzymywanie
Aby uzyskać więcej informacji na temat stanów zadań, zobacz JobState, wyliczenie.
Typ: | JobState |
Dopuszczalne wartości: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | 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.
Typ: | Int32 |
Aliasy: | TimeoutSec |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | 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ń reprezentujące 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
Program PowerShell zawiera następujące aliasy dla programu Wait-Job
:
- Wszystkie platformy:
wjb
Domyślnie Wait-Job
zwraca lub kończy oczekiwanie, gdy zadania znajdują się w jednym z następujących stanów:
- Ukończone
- Niepowodzenie
- Zatrzymana
- Suspended
- Odłączony
Wait-Job
Aby kontynuować oczekiwanie na wstrzymane i rozłączone zadania, użyj parametru Force.