Wait-Job

Menunggu hingga satu atau semua pekerjaan PowerShell yang berjalan dalam sesi berada dalam status mengakhiri.

Sintaks

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

Deskripsi

Wait-Job Cmdlet menunggu pekerjaan berada dalam status berakhir sebelum melanjutkan eksekusi. Status penghentian adalah:

  • Selesai
  • Gagal
  • Dihentikan
  • Ditangguhkan
  • Terputus

Anda dapat menunggu hingga pekerjaan tertentu, atau semua pekerjaan dalam status mengakhiri. Anda juga dapat mengatur waktu tunggu maksimum untuk pekerjaan menggunakan parameter Batas Waktu , atau menggunakan parameter Paksa untuk menunggu pekerjaan di Suspended status atau Disconnected .

Ketika perintah dalam pekerjaan selesai, Wait-Job mengembalikan objek pekerjaan dan melanjutkan eksekusi.

Anda dapat menggunakan Wait-Job cmdlet untuk menunggu pekerjaan dimulai dengan menggunakan Start-Job cmdlet atau parameter AsJob cmdlet Invoke-Command . Untuk informasi selengkapnya tentang pekerjaan, lihat about_Jobs.

Mulai Windows PowerShell 3.0, Wait-Job cmdlet juga menunggu jenis pekerjaan kustom, seperti pekerjaan alur kerja dan instans pekerjaan terjadwal. Untuk mengaktifkan Wait-Job menunggu pekerjaan dari jenis tertentu, impor modul yang mendukung jenis pekerjaan kustom ke dalam sesi sebelum Anda menjalankan Get-Job cmdlet, baik dengan menggunakan Import-Module cmdlet atau dengan menggunakan atau mendapatkan cmdlet dalam modul. Untuk informasi tentang jenis pekerjaan kustom tertentu, lihat dokumentasi fitur jenis pekerjaan kustom.

Contoh

Contoh 1: Tunggu semua pekerjaan

Get-Job | Wait-Job

Perintah ini menunggu semua pekerjaan yang berjalan dalam sesi selesai.

Contoh 2: Tunggu pekerjaan dimulai di komputer jarak jauh dengan menggunakan 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

Contoh ini menunjukkan cara menggunakan Wait-Job cmdlet dengan pekerjaan yang dimulai pada komputer jarak jauh dengan menggunakan Start-Job cmdlet. Perintah Start-Job dan Wait-Job dikirimkan ke komputer jarak jauh dengan menggunakan Invoke-Command cmdlet.

Contoh ini digunakan Wait-Job untuk menentukan apakah perintah yang Get-Date berjalan sebagai pekerjaan pada tiga komputer berbeda selesai.

Perintah pertama membuat sesi Windows PowerShell (PSSession) pada masing-masing dari tiga komputer jarak jauh dan menyimpannya dalam $s variabel.

Perintah kedua menggunakan Invoke-Command untuk berjalan Start-Job di masing-masing dari tiga sesi di $s. Semua pekerjaan diberi nama Date1.

Perintah ketiga menggunakan Invoke-Command untuk menjalankan Wait-Job. Perintah ini menunggu Date1 pekerjaan pada setiap komputer selesai. Ini menyimpan koleksi (array) objek pekerjaan yang $done dihasilkan dalam variabel.

Perintah keempat menggunakan properti Hitung dari array objek pekerjaan dalam $done variabel untuk menentukan berapa banyak pekerjaan yang selesai.

Contoh 3: Tentukan kapan pekerjaan pertama selesai

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

Contoh ini menggunakan parameter Apa pun untuk Wait-Job menentukan kapan pekerjaan pertama dari banyak pekerjaan yang berjalan dalam sesi saat ini berada dalam status mengakhiri. Ini juga menunjukkan cara menggunakan Wait-Job cmdlet untuk menunggu pekerjaan jarak jauh selesai.

Perintah pertama membuat PSSession pada setiap komputer yang tercantum dalam file Machines.txt dan menyimpan objek PSSession dalam $s variabel. Perintah menggunakan Get-Content cmdlet untuk mendapatkan konten file. Perintah Get-Content diapit dalam tanda kurung untuk memastikan bahwa perintah berjalan sebelum New-PSSession perintah.

Perintah kedua menyimpan Get-EventLog string perintah, dalam tanda kutip, dalam $c variabel .

Perintah ketiga menggunakan Invoke-Command cmdlet untuk dijalankan Start-Job di setiap sesi di $s. Perintah Start-Job memulai pekerjaan yang menjalankan Get-EventLog perintah dalam $c variabel.

Perintah menggunakan pengubah menggunakan pengubah cakupan untuk menunjukkan bahwa $c variabel ditentukan pada komputer lokal. Pengubah menggunakan lingkup diperkenalkan di Windows PowerShell 3.0. Untuk informasi selengkapnya tentang Pengubah menggunakan lingkup, lihat about_Remote_Variables.

Perintah keempat menggunakan Invoke-Command untuk menjalankan Wait-Job perintah dalam sesi. Ini menggunakan parameter Apa pun untuk menunggu sampai pekerjaan pertama pada komputer jarak jauh mengakhiri status.

Contoh 4: Mengatur waktu tunggu untuk pekerjaan di komputer jarak jauh

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>

Contoh ini menunjukkan cara menggunakan parameter Wait-Job Batas Waktu untuk mengatur waktu tunggu maksimum untuk pekerjaan yang berjalan di komputer jarak jauh.

Perintah pertama membuat PSSession pada masing-masing dari tiga komputer jarak jauh (Server01, Server02, dan Server03), lalu menyimpan objek PSSession dalam $s variabel.

Perintah kedua menggunakan Invoke-Command untuk berjalan Start-Job di setiap objek PSSession di $s. Ini menyimpan objek pekerjaan yang dihasilkan dalam $jobs variabel .

Perintah ketiga menggunakan Invoke-Command untuk berjalan Wait-Job di setiap sesi di $s. Perintah Wait-Job menentukan apakah semua perintah telah selesai dalam waktu 30 detik. Ini menggunakan parameter Timeout dengan nilai 30 untuk menetapkan waktu tunggu maksimum, lalu menyimpan hasil perintah dalam $done variabel.

Dalam hal ini, setelah 30 detik, hanya perintah pada komputer Server02 yang telah selesai. Wait-Job mengakhiri penantian, mengembalikan objek yang mewakili pekerjaan yang telah selesai, dan menampilkan prompt perintah.

Variabel $done berisi objek pekerjaan yang mewakili pekerjaan yang berjalan di Server02.

Contoh 5: Tunggu hingga salah satu dari beberapa pekerjaan selesai

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

Perintah ini mengidentifikasi tiga pekerjaan dengan ID mereka dan menunggu sampai salah satu dari mereka berada dalam status mengakhiri. Eksekusi berlanjut ketika pekerjaan pertama selesai.

Contoh 6: Tunggu periode, lalu izinkan pekerjaan untuk melanjutkan di latar belakang

Wait-Job -Name "DailyLog" -Timeout 120

Perintah ini menunggu 120 detik (dua menit) hingga pekerjaan DailyLog selesai. Jika pekerjaan tidak selesai dalam dua menit ke depan, eksekusi berlanjut, dan pekerjaan terus berjalan di latar belakang.

Contoh 7: Tunggu pekerjaan berdasarkan nama

Wait-Job -Name "Job3"

Perintah ini menggunakan nama pekerjaan untuk mengidentifikasi pekerjaan yang akan menunggu.

Contoh 8: Tunggu pekerjaan di komputer lokal dimulai dengan Start-Job

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

Contoh ini menunjukkan cara menggunakan Wait-Job cmdlet dengan pekerjaan yang dimulai di komputer lokal dengan menggunakan Start-Job.

Perintah ini memulai pekerjaan yang mendapatkan file skrip Windows PowerShell yang ditambahkan atau diperbarui dalam seminggu terakhir.

Perintah pertama menggunakan Start-Job untuk memulai pekerjaan di komputer lokal. Pekerjaan menjalankan Get-ChildItem perintah yang mendapatkan semua file yang memiliki ekstensi nama file .ps1 yang ditambahkan atau diperbarui dalam seminggu terakhir.

Perintah ketiga menggunakan Wait-Job untuk menunggu hingga pekerjaan dalam status mengakhiri. Ketika pekerjaan selesai, perintah menampilkan objek pekerjaan, yang berisi informasi tentang pekerjaan.

Contoh 9: Tunggu pekerjaan dimulai di komputer jarak jauh dengan menggunakan Invoke-Command

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

Contoh ini menunjukkan cara menggunakan Wait-Job dengan pekerjaan yang dimulai pada komputer jarak jauh dengan menggunakan parameter AsJob dari Invoke-Command. Saat menggunakan AsJob, pekerjaan dibuat di komputer lokal dan hasilnya secara otomatis dikembalikan ke komputer lokal, meskipun pekerjaan berjalan di komputer jarak jauh.

Contoh ini digunakan Wait-Job untuk menentukan apakah perintah yang Get-Process berjalan dalam sesi pada tiga komputer jarak jauh dalam status mengakhiri.

Perintah pertama membuat objek PSSession di tiga komputer dan menyimpannya dalam $s variabel.

Perintah kedua menggunakan Invoke-Command untuk berjalan Get-Process di masing-masing dari tiga sesi di $s. Perintah menggunakan parameter AsJob untuk menjalankan perintah secara asinkron sebagai pekerjaan. Perintah mengembalikan objek pekerjaan, sama seperti pekerjaan yang dimulai dengan menggunakan Start-Job, dan objek pekerjaan disimpan dalam $j variabel .

Perintah ketiga menggunakan operator alur (|) untuk mengirim objek $j pekerjaan ke Wait-Job cmdlet. Perintah Invoke-Command tidak diperlukan dalam kasus ini, karena pekerjaan berada di komputer lokal.

Contoh 10: Tunggu pekerjaan yang memiliki ID

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

Perintah ini menunggu pekerjaan dengan nilai ID 1.

Parameter

-Any

Menunjukkan bahwa cmdlet ini mengembalikan objek pekerjaan dan melanjutkan eksekusi ketika pekerjaan selesai. Secara default, Wait-Job menunggu hingga semua pekerjaan yang ditentukan selesai sebelum menampilkan perintah.

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

-Filter

Menentukan tabel kondisi hash. Cmdlet ini menunggu pekerjaan yang memenuhi semua kondisi dalam tabel hash. Masukkan tabel hash di mana kunci adalah properti pekerjaan dan nilainya adalah nilai properti pekerjaan.

Parameter ini hanya berfungsi pada jenis pekerjaan kustom, seperti pekerjaan alur kerja dan pekerjaan terjadwal. Ini tidak berfungsi pada pekerjaan standar, seperti yang dibuat dengan menggunakan Start-Job cmdlet. Untuk informasi tentang dukungan untuk parameter ini, lihat topik bantuan untuk jenis pekerjaan.

Parameter ini diperkenalkan di Windows PowerShell 3.0.

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

-Force

Menunjukkan bahwa cmdlet ini terus menunggu pekerjaan dalam status Ditangguhkan atau Terputus. Secara default, Wait-Job mengembalikan, atau mengakhiri penantian, saat pekerjaan berada di salah satu status berikut:

  • Selesai
  • Gagal
  • Dihentikan
  • Ditangguhkan
  • Terputus

Parameter ini diperkenalkan di Windows PowerShell 3.0.

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

-Id

Menentukan array ID pekerjaan yang cmdlet ini tunggu.

ID adalah bilangan bulat yang secara unik mengidentifikasi pekerjaan dalam sesi saat ini. Lebih mudah diingat dan ditik daripada ID instans, tetapi hanya unik dalam sesi saat ini. Anda dapat mengetik satu atau beberapa ID, dipisahkan oleh koma. Untuk menemukan ID pekerjaan, ketik Get-Job.

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

-InstanceId

Menentukan array ID instans pekerjaan yang cmdlet ini menunggu. Defaultnya adalah semua pekerjaan.

ID instans adalah GUID yang secara unik mengidentifikasi pekerjaan di komputer. Untuk menemukan ID instans pekerjaan, gunakan Get-Job.

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

-Job

Menentukan pekerjaan di mana cmdlet ini menunggu. Masukkan variabel yang berisi objek pekerjaan atau perintah yang mendapatkan objek pekerjaan. Anda juga dapat menggunakan operator alur untuk mengirim objek pekerjaan ke Wait-Job cmdlet. Secara default, Wait-Job menunggu semua pekerjaan yang dibuat dalam sesi saat ini.

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

-Name

Menentukan nama pekerjaan yang ramah di mana cmdlet ini menunggu.

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

-State

Menentukan status pekerjaan. Cmdlet ini hanya menunggu pekerjaan dalam status yang ditentukan. Nilai yang dapat diterima untuk parameter ini adalah:

  • Belum Dimulai
  • Sedang berjalan
  • Selesai
  • Gagal
  • Dihentikan
  • Terblokir
  • Ditangguhkan
  • Terputus
  • Menangguhkan
  • Menghentikan

Untuk informasi selengkapnya tentang status pekerjaan, lihat Enumerasi 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

Menentukan waktu tunggu maksimum untuk setiap pekerjaan, dalam detik. Nilai default, -1, menunjukkan bahwa cmdlet menunggu hingga pekerjaan selesai. Waktu dimulai saat Anda mengirimkan Wait-Job perintah, bukan Start-Job perintah .

Jika waktu ini terlampaui, tunggu berakhir dan eksekusi berlanjut, bahkan jika pekerjaan masih berjalan. Perintah tidak menampilkan pesan kesalahan apa pun.

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

Input

System.Management.Automation.RemotingJob

Anda dapat menyalurkan objek pekerjaan ke cmdlet ini.

Output

System.Management.Automation.PSRemotingJob

Cmdlet ini mengembalikan objek pekerjaan yang mewakili pekerjaan dalam status mengakhiri. Jika tunggu berakhir karena nilai parameter Batas Waktu terlampaui, Wait-Job tidak mengembalikan objek apa pun.

Catatan

PowerShell menyertakan alias berikut untuk Wait-Job:

  • Semua platform:
    • wjb

Secara default, Wait-Job mengembalikan, atau mengakhiri penantian, saat pekerjaan berada di salah satu status berikut:

  • Selesai
  • Gagal
  • Dihentikan
  • Ditangguhkan
  • Terputus

Untuk mengarahkan Wait-Job untuk terus menunggu pekerjaan Ditangguhkan dan Terputus, gunakan parameter Paksa .