Bagikan melalui


Wait-Job

Menunggu hingga satu atau semua pekerjaan PowerShell yang berjalan dalam sesi berada dalam keadaan dihentikan.

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

cmdlet Wait-Job menunggu pekerjaan mencapai status akhir sebelum melanjutkan eksekusi. Status penghentian adalah:

  • Selesai
  • Gagal
  • Berhenti
  • Ditangguhkan
  • Terputus

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

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

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

Mulai Windows PowerShell 3.0, cmdlet Wait-Job juga menunggu jenis pekerjaan kustom, seperti pekerjaan alur kerja dan instans pekerjaan terjadwal. Untuk memungkinkan Wait-Job menunggu pekerjaan tipe tertentu, impor modul yang mendukung tipe pekerjaan kustom ke dalam sesi sebelum Anda menjalankan cmdlet Get-Job, baik dengan menggunakan cmdlet Import-Module atau mendapatkan cmdlet dalam modul tersebut. 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 untuk 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 cmdlet Wait-Job dengan menggunakan cmdlet Start-Job pada pekerjaan yang dimulai di komputer jarak jauh. Perintah Start-Job dan Wait-Job dikirimkan ke komputer jarak jauh dengan menggunakan cmdlet Invoke-Command.

Contoh ini menggunakan Wait-Job untuk menentukan apakah perintah Get-Date yang berjalan sebagai tugas di tiga komputer berbeda sudah selesai.

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

Perintah kedua menggunakan Invoke-Command untuk menjalankan 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 pekerjaan Date1 pada setiap komputer selesai. Ini menyimpan koleksi yang dihasilkan (array) dari objek tugas dalam variabel $done.

Perintah keempat menggunakan properti hitungan dari array objek tugas dalam variabel pada $done untuk menentukan berapa banyak dari 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 dari Wait-Job untuk menentukan kapan pekerjaan pertama dari banyak pekerjaan yang berjalan dalam sesi saat ini berada dalam status mengakhiri. Ini juga menunjukkan cara menggunakan cmdlet Wait-Job untuk menunggu pekerjaan jarak jauh selesai.

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

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

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

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

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

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 TimeoutWait-Job 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 variabel $s.

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

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

Dalam hal ini, setelah 30 detik, hanya perintah pada komputer Server02 yang telah selesai. Wait-Job mengakhiri penantian, mengembalikan objek yang mewakili pekerjaan yang 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 berdasarkan ID mereka dan menunggu hingga salah satu di antaranya berada dalam status penghentian. Eksekusi berlanjut ketika pekerjaan pertama selesai.

Contoh 6: Tunggu beberapa waktu, 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 harus ditunggu.

Contoh 8: Tunggu pekerjaan yang dimulai pada komputer lokal 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 cmdlet Wait-Job dengan menggunakan Start-Jobuntuk pekerjaan yang dimulai di komputer lokal.

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 perintah Get-ChildItem 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 penghentian. 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 untuk menjalankan pekerjaan di komputer jarak jauh dengan menggunakan parameter AsJob 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 menggunakan Wait-Job untuk menentukan apakah perintah Get-Process yang dijalankan dalam sesi di tiga komputer jarak jauh berada dalam keadaan mengakhiri.

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

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

Perintah ketiga menggunakan operator alur (|) untuk mengirim objek pekerjaan dalam $j ke cmdlet Wait-Job. 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 tugas 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.

Jenis:SwitchParameter
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-Filter

Menentukan tabel hash dari kondisi. 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 cmdlet Start-Job. Untuk informasi tentang dukungan untuk parameter ini, lihat topik bantuan untuk jenis pekerjaan.

Parameter ini diperkenalkan di Windows PowerShell 3.0.

Jenis:Hashtable
Position:0
Nilai default:None
Diperlukan:True
Terima input alur:True
Terima karakter wildcard: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
  • Berhenti
  • Ditangguhkan
  • Terputus

Parameter ini diperkenalkan di Windows PowerShell 3.0.

Jenis:SwitchParameter
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-Id

Menentukan daftar ID pekerjaan yang dinantikan oleh cmdlet ini.

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.

Jenis:Int32[]
Position:0
Nilai default:None
Diperlukan:True
Terima input alur:True
Terima karakter wildcard:False

-InstanceId

Menentukan array ID instance dari pekerjaan yang ditunggu cmdlet ini. Defaultnya adalah semua pekerjaan.

ID instans adalah GUID yang secara unik mengidentifikasi tugas pada komputer. Untuk menemukan ID instance dari sebuah pekerjaan, gunakan Get-Job.

Jenis:Guid[]
Position:0
Nilai default:None
Diperlukan:True
Terima input alur:True
Terima karakter wildcard:False

-Job

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

Jenis:Job[]
Position:0
Nilai default:None
Diperlukan:True
Terima input alur:True
Terima karakter wildcard:False

-Name

Menentukan nama pekerjaan yang ramah di mana cmdlet ini menunggu.

Jenis:String[]
Position:0
Nilai default:None
Diperlukan:True
Terima input alur:True
Terima karakter wildcard:False

-State

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

  • Belum Mulai
  • Berlari
  • Selesai
  • Gagal
  • Berhenti
  • Diblokir
  • Ditangguhkan
  • Terputus
  • Menangguhkan
  • Menghentikan

Untuk informasi selengkapnya tentang status tugas, lihat Enumerasi JobState.

Jenis:JobState
Nilai yang diterima:NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint
Position:0
Nilai default:None
Diperlukan:True
Terima input alur:True
Terima karakter wildcard: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 perintah Wait-Job, bukan perintah Start-Job.

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

Jenis:Int32
Alias:TimeoutSec
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard: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 selesai. 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
  • Berhenti
  • Ditangguhkan
  • Terputus

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