Wait-Job

Oturumda çalışan PowerShell işlerinin biri veya tümü sonlandırıcı duruma gelene kadar bekler.

Syntax

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

Description

Cmdlet yürütmeye Wait-Job devam etmeden önce işin sonlandırıcı durumda olmasını bekler. Sonlandırıcı durumlar şunlardır:

  • Tamamlandı
  • Başarısız
  • Durduruldu
  • Askıya alındı
  • Bağlantı kesildi

Belirtilen iş veya tüm işler sonlandırıcı duruma gelene kadar bekleyebilirsiniz. Ayrıca Timeout parametresini kullanarak iş için en uzun bekleme süresini ayarlayabilir veya veya Disconnected durumlarında bir işi beklemek için Zorla parametresini Suspended kullanabilirsiniz.

İşteki komutlar tamamlandığında, Wait-Job bir iş nesnesi döndürür ve yürütmeye devam eder.

cmdlet'ini Wait-Job veya cmdlet'in AsJob parametresini kullanarak Start-Job işlerin başlamasını beklemek için cmdlet'ini Invoke-Command kullanabilirsiniz. İşler hakkında daha fazla bilgi için bkz . about_Jobs.

Windows PowerShell 3.0'dan Wait-Job başlayarak, cmdlet iş akışı işleri ve zamanlanmış işlerin örnekleri gibi özel iş türlerini de bekler. Belirli bir türdeki işleri beklemeyi etkinleştirmek Wait-Job için, cmdlet'ini çalıştırmadan Get-Job önce, cmdlet'ini kullanarak Import-Module veya modülde bir cmdlet'i kullanarak veya alarak özel iş türünü destekleyen modülü oturuma aktarın. Belirli bir özel iş türü hakkında bilgi için özel iş türü özelliğinin belgelerine bakın.

Örnekler

Örnek 1: Tüm işleri bekleme

Get-Job | Wait-Job

Bu komut, oturumda çalışan tüm işlerin tamamlanmasını bekler.

Örnek 2: Start-Job kullanarak uzak bilgisayarlarda işlerin başlatılmasını bekleyin

$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

Bu örnek, cmdlet'ini Wait-Job kullanarak uzak bilgisayarlarda başlatılan işlerle cmdlet'in Start-Job nasıl kullanılacağını gösterir. Hem hem de Start-JobWait-Job komutları cmdlet'i kullanılarak Invoke-Command uzak bilgisayara gönderilir.

Bu örnek, üç farklı bilgisayarda iş olarak çalışan bir Get-Date komutun tamamlanıp tamamlanmadığını belirlemek için kullanırWait-Job.

İlk komut, üç uzak bilgisayarın her birinde bir Windows PowerShell oturumu (PSSession) oluşturur ve bunları değişkende $s depolar.

İkinci komut, içindeki üç oturumun $sher birinde çalıştırmak Start-Job için kullanırInvoke-Command. Tüm işler Date1 olarak adlandırılır.

Üçüncü komut komutunu çalıştırmak Wait-Jobiçin kullanırInvoke-Command. Bu komut, Date1 her bilgisayardaki işlerin tamamlanmasını bekler. Değişkende iş nesnelerinin $done elde edilen koleksiyonunu (dizisi) depolar.

Dördüncü komut, iş nesnelerinin değişkenindeki $done dizisinin Count özelliğini kullanarak işlerin kaçının bittiğini belirler.

Örnek 3: İlk işin ne zaman biteceğini belirleme

$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}

Bu örnek, geçerli oturumda çalışan birçok işin ilkinin sonlandırıcı durumda olduğunu belirlemek için Any parametresini Wait-Job kullanır. Ayrıca, uzak işlerin bitmesini beklemek için cmdlet'in nasıl kullanılacağını Wait-Job gösterir.

İlk komut, Machines.txt dosyasında listelenen bilgisayarların her birinde bir PSSession oluşturur ve PSSession nesnelerini değişkende $s depolar. komutu, dosyanın içeriğini almak için cmdlet'ini kullanır Get-Content . Get-Content Komut, komut öncesinde New-PSSession çalıştığından emin olmak için parantez içine alınır.

İkinci komut, değişkeninde tırnak içinde $c bir Get-EventLog komut dizesi depolar.

Üçüncü komut, içindeki oturumların her birinde çalıştırmak Start-Job için cmdlet'ini $skullanırInvoke-Command. komutu, Start-Job değişkeninde $c komutunu çalıştıran Get-EventLog bir iş başlatır.

komutu, değişkenin yerel bilgisayarda tanımlandığını $c belirtmek için Using scope değiştiricisini kullanır. Using scope değiştiricisi Windows PowerShell 3.0'da kullanıma sunulmuştur. Kapsam değiştirici kullanma hakkında daha fazla bilgi için bkz. about_Remote_Variables.

Dördüncü komut, oturumlarda bir Wait-Job komut çalıştırmak için kullanırInvoke-Command. Uzak bilgisayarlardaki ilk işin sonlandırıcı duruma gelmesini beklemek için Any parametresini kullanır.

Örnek 4: Uzak bilgisayarlarda işler için bekleme süresi ayarlama

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>

Bu örnekte, uzak bilgisayarlarda çalışan işler için en uzun bekleme süresini ayarlamak için zaman aşımı parametresinin Wait-Job nasıl kullanılacağı gösterilmektedir.

İlk komut, üç uzak bilgisayarın her birinde (Server01, Server02 ve Server03) bir PSSession oluşturur ve ardından PSSession nesnelerini değişkende $s depolar.

İkinci komut, içindeki PSSession nesnelerinin $sher birinde çalıştırmak Start-Job için kullanırInvoke-Command. Sonuçta elde edilen iş nesnelerini değişkende $jobs depolar.

Üçüncü komut, içindeki oturumların $sher birinde çalıştırmak Wait-Job için kullanırInvoke-Command. Wait-Job komutu, tüm komutların 30 saniye içinde tamamlanıp tamamlanmadığını belirler. Maksimum bekleme süresini oluşturmak için 30 değerine sahip Timeout parametresini kullanır ve ardından komutun sonuçlarını değişkende $done depolar.

Bu durumda, 30 saniye sonra yalnızca Server02 bilgisayarındaki komut tamamlanır. Wait-Job beklemeyi sonlandırır, tamamlanan işi temsil eden nesneyi döndürür ve komut istemini görüntüler.

değişkeni, $done Server02'de çalıştıran işi temsil eden bir iş nesnesi içerir.

Örnek 5: Birkaç işten biri bitene kadar bekleyin

Wait-Job -id 1,2,5 -Any

Bu komut, kimliklerine göre üç işi tanımlar ve herhangi biri sonlandırıcı duruma gelene kadar bekler. İlk iş tamamlandığında yürütme devam eder.

Örnek 6: Bir süre bekleyin, ardından işin arka planda devam etmesine izin verin

Wait-Job -Name "DailyLog" -Timeout 120

Bu komut, DailyLog işinin bitmesini 120 saniye (iki dakika) bekler. İş sonraki iki dakika içinde tamamlanmazsa yürütme devam eder ve iş arka planda çalışmaya devam eder.

Örnek 7: ada göre bir iş bekleyin

Wait-Job -Name "Job3"

Bu komut, bekleyebileceğiniz işi tanımlamak için iş adını kullanır.

Örnek 8: Start-Job ile başlatılan yerel bilgisayardaki işleri bekleme

$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1| Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job

Bu örnekte cmdlet'in Wait-Job kullanılarak Start-Jobyerel bilgisayarda başlatılan işlerle nasıl kullanılacağı gösterilmektedir.

Bu komutlar, geçen hafta eklenen veya güncelleştirilen Windows PowerShell betik dosyalarını alan bir işi başlatır.

İlk komut, yerel bilgisayarda bir iş başlatmak için kullanır Start-Job . İş, geçen hafta eklenen veya güncelleştirilen .ps1 dosya adı uzantısına sahip tüm dosyaları alan bir Get-ChildItem komut çalıştırır.

Üçüncü komut, iş sonlandırıcı duruma gelene kadar beklemek için kullanır Wait-Job . İş tamamlandığında, komut iş hakkındaki bilgileri içeren iş nesnesini görüntüler.

Örnek 9: Invoke-Command kullanarak uzak bilgisayarlarda işlerin başlatılmasını bekleyin

$s = New-PSSession -ComputerName Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job

Bu örnekte, 'nin AsJob parametresi kullanılarak uzak bilgisayarlarda başlatılan işlerle nasıl kullanılacağı Wait-Job gösterilmektedirInvoke-Command. AsJob kullanılırken, iş yerel bilgisayarda oluşturulur ve iş uzak bilgisayarlarda çalıştırılıyor olsa bile sonuçlar otomatik olarak yerel bilgisayara döndürülür.

Bu örnek, üç uzak bilgisayarda oturumlarda çalışan bir Get-Process komutun sonlandırıcı durumda olup olmadığını belirlemek için kullanırWait-Job.

İlk komut üç bilgisayarda PSSession nesneleri oluşturur ve bunları değişkende $s depolar.

İkinci komut, içindeki üç oturumun $sher birinde çalıştırmak Get-Process için kullanırInvoke-Command. komutu asjob parametresini kullanarak komutu zaman uyumsuz olarak bir iş olarak çalıştırır. komutu, kullanılarak Start-Jobbaşlatılan işler gibi bir iş nesnesi döndürür ve iş nesnesi değişkende $j depolanır.

Üçüncü komut, içindeki iş nesnesini cmdlet'ine $j göndermek için Wait-Job bir işlem hattı işleci (|) kullanır. Invoke-Command İş yerel bilgisayarda bulunduğundan, bu durumda bir komut gerekli değildir.

Örnek 10: Kimliği olan bir işi bekleme

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

Bu komut, kimlik değeri 1 olan işi bekler.

Parametreler

-Any

Bu cmdlet'in iş nesnesini döndürdüğünü ve herhangi bir iş tamamlandığında yürütmeye devam ettiğini gösterir. Varsayılan olarak, Wait-Job istem görüntülenmeden önce belirtilen tüm işler tamamlanana kadar bekler.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Filter

Koşulların karma tablosunu belirtir. Bu cmdlet karma tablodaki tüm koşulları karşılayan işleri bekler. Anahtarların iş özellikleri, değerlerin ise iş özelliği değerleri olduğu bir karma tablo girin.

Bu parametre yalnızca iş akışı işleri ve zamanlanmış işler gibi özel iş türlerinde çalışır. Cmdlet'i kullanılarak Start-Job oluşturulanlar gibi standart işlerde çalışmaz. Bu parametre desteği hakkında bilgi için iş türü için yardım konusuna bakın.

Bu parametre Windows PowerShell 3.0'da kullanıma sunulmuştur.

Type:Hashtable
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Force

Bu cmdlet'in işleri Askıya Alındı veya Bağlantısı Kesildi durumunda beklemeye devam ettiğini gösterir. varsayılan olarak, Wait-Job işler aşağıdaki durumlardan birinde olduğunda beklemeyi döndürür veya sonlandırır:

  • Tamamlandı
  • Başarısız
  • Durduruldu
  • Askıya alındı
  • Bağlantı kesildi

Bu parametre Windows PowerShell 3.0'da kullanıma sunulmuştur.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

Bu cmdlet'in beklediği işlerin kimlik dizisini belirtir.

Kimlik, geçerli oturumdaki işi benzersiz olarak tanımlayan bir tamsayıdır. Örnek kimliğinden daha kolay anımsanıp yazabilirsiniz, ancak yalnızca geçerli oturumda benzersizdir. Virgülle ayırarak bir veya daha fazla kimlik yazabilirsiniz. İşin kimliğini bulmak için yazın Get-Job.

Type:Int32[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-InstanceId

Bu cmdlet'in beklediği işlerin örnek kimlikleri dizisini belirtir. Varsayılan değer tüm işlerdir.

Örnek kimliği, bilgisayardaki işi benzersiz olarak tanımlayan bir GUID'dir. bir işin örnek kimliğini bulmak için kullanın Get-Job.

Type:Guid[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Job

Bu cmdlet'in beklediği işleri belirtir. İş nesnelerini içeren bir değişken veya iş nesnelerini alan bir komut girin. İş nesnelerini Wait-Job cmdlet'e göndermek için işlem hattı işleci de kullanabilirsiniz. Varsayılan olarak, Wait-Job geçerli oturumda oluşturulan tüm işleri bekler.

Type:Job[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Name

Bu cmdlet'in beklediği işlerin kolay adlarını belirtir.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-State

bir iş durumu belirtir. Bu cmdlet yalnızca belirtilen durumdaki işler için bekler. Bu parametrenin kabul edilebilir değerleri şunlardır:

  • NotStarted
  • Çalışıyor
  • Tamamlandı
  • Başarısız
  • Durduruldu
  • Engellendi
  • Askıya alındı
  • Bağlantı kesildi
  • Askıya alınıyor
  • Durduruluyor

İş durumları hakkında daha fazla bilgi için bkz . JobState Numaralandırması.

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

Her iş için en uzun bekleme süresini saniye cinsinden belirtir. -1 varsayılan değeri, cmdlet'in iş bitene kadar beklediğini gösterir. Zamanlama, komutu değil, komutu gönderdiğinizde Wait-JobStart-Job başlar.

Bu süre aşılırsa, iş hala çalışıyor olsa bile bekleme sona erer ve yürütme devam eder. Komut herhangi bir hata iletisi görüntülemez.

Type:Int32
Aliases:TimeoutSec
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Girişler

System.Management.Automation.RemotingJob

Bir iş nesnesini bu cmdlet'e yöneltebilirsiniz.

Çıkışlar

System.Management.Automation.PSRemotingJob

Bu cmdlet, sonlandırıcı durumdaki işleri temsil eden iş nesnelerini döndürür. Timeout parametresinin değeri aşıldığından bekleme süresi sona eriyorsa hiçbir Wait-Job nesne döndürmez.

Notlar

PowerShell için aşağıdaki diğer adları Wait-Jobiçerir:

  • Tüm platformlar:
    • wjb

varsayılan olarak, Wait-Job işler aşağıdaki durumlardan birinde olduğunda beklemeyi döndürür veya sonlandırır:

  • Tamamlandı
  • Başarısız
  • Durduruldu
  • Askıya alındı
  • Bağlantı kesildi

Askıya Alınan ve Bağlantısı Kesilen işleri beklemeye devam etmek üzere yönlendirmek Wait-Job için Zorla parametresini kullanın.