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 na zakończenie zadania 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 do oczekiwania na zadanie w Suspended stanach lub Disconnected .

Po zakończeniu Wait-Job wykonywania poleceń w zadaniu 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-CommandAsJob 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 niestandardowy typ zadania do sesji przed uruchomieniem Get-Job polecenia cmdlet za pomocą polecenia cmdlet lub za pomocą Import-Module polecenia cmdlet lub polecenia cmdlet w module. Aby uzyskać informacje o określonym niestandardowym typie 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 . 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 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 polecenia Invoke-Command do uruchomienia Start-Job w każdej z trzech sesji w programie $s. Wszystkie zadania mają nazwę Date1.

Trzecie polecenie używa polecenia Invoke-Command do uruchomienia Wait-Jobpolecenia . To polecenie czeka na Date1 zakończenie zadań na każdym komputerze. Przechowuje 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 w celu określenia, ile zadań zostało zakończonych.

Przykład 3. Określanie, kiedy pierwsze zadanie zakończy się

$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 dowolnego 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 serwer 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 on uruchamiany 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 uruchamiające Get-EventLog polecenie w zmiennej $c .

Polecenie używa modyfikatora używającego zakresu, 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 przy użyciu , 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.

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 użyć parametru Limit czasu w Wait-Job celu ustawienia maksymalnego czasu oczekiwania dla zadań uruchomionych na komputerach zdalnych.

Pierwsze polecenie tworzy serwer 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 polecenia Invoke-Command do uruchomienia Start-Job w każdym z obiektów PSSession w systemie $s. Przechowuje wynikowe obiekty zadań w zmiennej $jobs .

Trzecie polecenie używa polecenia Invoke-Command do uruchomienia 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 w celu ustalenia maksymalnego czasu oczekiwania, a następnie zapisuje wyniki polecenia w zmiennej $done .

W takim przypadku po upływie 30 sekund 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 identyfikatorów i czeka, aż którykolwiek 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 poczekać.

Przykład 8. Oczekiwanie na zadania na komputerze lokalnym uruchomione 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 pliki skryptów Windows PowerShell, które zostały dodane lub zaktualizowane w ciągu ostatniego tygodnia.

Pierwsze polecenie używa polecenia Start-Job 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 ciągu ostatniego tygodnia.

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 .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 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 polecenia Invoke-Command 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 metody 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: Poczekaj na zadanie z identyfikatorem

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 oczekuje. 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ń reprezentujące zadania w stanie zakończenia. Jeśli oczekiwanie kończy się, ponieważ wartość parametru Limit czasu jest przekroczona, Wait-Job nie zwraca żadnych obiektów.

Uwagi

Domyślnie Wait-Job 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.