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-Jobpolecenia . 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 $jWait-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.

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 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.

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 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.

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 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.

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. 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.

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 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.

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ń 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.