Bagikan melalui


Receive-Job

Mendapatkan hasil pekerjaan latar belakang PowerShell dalam sesi saat ini.

Sintaks

Receive-Job
       [-Job] <Job[]>
       [[-Location] <string[]>]
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]
Receive-Job
       [-Job] <Job[]>
       [[-ComputerName] <string[]>]
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]
Receive-Job
       [-Job] <Job[]>
       [[-Session] <PSSession[]>]
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]
Receive-Job
       [-Name] <string[]>
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]
Receive-Job
       [-InstanceId] <guid[]>
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]
Receive-Job
       [-Id] <int[]>
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]

Deskripsi

Receive-Job Cmdlet mendapatkan hasil pekerjaan latar belakang PowerShell, seperti yang dimulai dengan menggunakan Start-Job cmdlet atau parameter AsJob dari cmdlet apa pun. Anda bisa mendapatkan hasil semua pekerjaan atau mengidentifikasi pekerjaan berdasarkan nama, ID, ID instans, nama komputer, lokasi, atau sesi, atau dengan mengirimkan objek pekerjaan.

Saat Anda memulai pekerjaan latar belakang PowerShell, pekerjaan dimulai, tetapi hasilnya tidak segera muncul. Sebagai gantinya, perintah mengembalikan objek yang mewakili pekerjaan latar belakang. Objek pekerjaan berisi informasi yang berguna tentang pekerjaan, tetapi tidak berisi hasilnya. Metode ini memungkinkan Anda terus bekerja dalam sesi saat pekerjaan berjalan. Untuk informasi selengkapnya tentang pekerjaan latar belakang di PowerShell, lihat about_Jobs.

Receive-Job Cmdlet mendapatkan hasil yang telah dihasilkan pada saat Receive-Job perintah dikirimkan. Jika hasilnya belum selesai, Anda dapat menjalankan perintah tambahan Receive-Job untuk mendapatkan hasil yang tersisa.

Secara default, hasil pekerjaan dihapus dari sistem saat Anda menerimanya, tetapi Anda dapat menggunakan parameter Keep untuk menyimpan hasilnya sehingga Anda dapat menerimanya lagi. Untuk menghapus hasil pekerjaan, jalankan Receive-Job perintah lagi tanpa parameter Keep , tutup sesi, atau gunakan Remove-Job cmdlet untuk menghapus pekerjaan dari sesi.

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

Contoh

Contoh 1: Dapatkan hasil untuk pekerjaan tertentu

$job = Start-Job -ScriptBlock {Get-Process}
Start-Sleep -Seconds 1
Receive-Job -Job $job

Perintah ini menggunakan parameter Receive-Job Pekerjaan untuk mendapatkan hasil pekerjaan tertentu.

Perintah pertama memulai pekerjaan dengan Start-Job dan menyimpan objek pekerjaan dalam $job variabel.

Perintah kedua menggunakan Receive-Job cmdlet untuk mendapatkan hasil pekerjaan. Ini menggunakan parameter Pekerjaan untuk menentukan pekerjaan.

Contoh 2: Gunakan parameter Keep

$job = Start-Job -ScriptBlock {Get-Service dhcp, fakeservice}
Start-Sleep -Seconds 1
$job | Receive-Job -Keep

Cannot find any service with service name 'fakeservice'.
    + CategoryInfo          : ObjectNotFound: (fakeservice:String) [Get-Service], ServiceCommandException
    + FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
    + PSComputerName        : localhost

Status   Name               DisplayName
------   ----               -----------
Running  dhcp               DHCP Client

$job | Receive-Job -Keep

Cannot find any service with service name 'fakeservice'.
    + CategoryInfo          : ObjectNotFound: (fakeservice:String) [Get-Service], ServiceCommandException
    + FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
    + PSComputerName        : localhost

Status   Name               DisplayName
------   ----               -----------
Running  dhcp               DHCP Client

Contoh ini menyimpan pekerjaan dalam $job variabel, dan menyalurkan pekerjaan ke Receive-Job cmdlet. Parameter -Keep juga digunakan untuk memungkinkan semua data aliran agregat diambil lagi setelah tampilan pertama.

Contoh 3: Mendapatkan hasil dari beberapa pekerjaan latar belakang

Saat Anda menggunakan parameter Invoke-Command AsJob untuk memulai pekerjaan, objek pekerjaan dibuat di komputer lokal, meskipun pekerjaan berjalan di komputer jarak jauh. Akibatnya, Anda menggunakan perintah lokal untuk mengelola pekerjaan.

Selain itu, saat Anda menggunakan AsJob, PowerShell mengembalikan satu objek pekerjaan yang berisi pekerjaan anak untuk setiap pekerjaan yang dimulai. Dalam hal ini, objek pekerjaan berisi tiga pekerjaan anak, satu untuk setiap pekerjaan di setiap komputer jarak jauh.

# Use the Invoke-Command cmdlet with the -AsJob parameter to start a background job that
# runs a Get-Service command on three remote computers. Store the resulting job object in
# the $j variable
$j = Invoke-Command -ComputerName Server01, Server02, Server03 -ScriptBlock {Get-Service} -AsJob
# Display the value of the **ChildJobs** property of the job object in $j. The display
# shows that the command created three child jobs, one for the job on each remote
# computer. You could also use the -IncludeChildJobs parameter of the Get-Job cmdlet.
$j.ChildJobs

Id   Name     State      HasMoreData   Location       Command
--   ----     -----      -----------   --------       -------
2    Job2     Completed  True          Server01       Get-Service
3    Job3     Completed  True          Server02       Get-Service
4    Job4     Completed  True          Server03       Get-Service

# Use the Receive-Job cmdlet to get the results of just the Job3 child job that ran on the
# Server02 computer. Use the *Keep* parameter to allow you to view the aggregated stream
# data more than once.
Receive-Job -Name Job3 -Keep

Status  Name        DisplayName                        PSComputerName
------  ----------- -----------                        --------------
Running AeLookupSvc Application Experience             Server02
Stopped ALG         Application Layer Gateway Service  Server02
Running Appinfo     Application Information            Server02
Running AppMgmt     Application Management             Server02

Contoh 4: Mendapatkan hasil pekerjaan latar belakang di beberapa komputer jarak jauh

# Use the New-PSSession cmdlet to create three user-managed PSSessions on three servers,
# and save the sessions in the $s variable.
$s = New-PSSession -ComputerName Server01, Server02, Server03
# Use Invoke-Command run a Start-Job command in each of the PSSessions in the $s variable.
# The code creates a new job with a custom name to each server. The job outputs the
# datetime from each server. Save the job objects in the $j variable.
$invokeCommandSplat = @{
    Session = $s
    ScriptBlock = {
        Start-Job -Name $('MyJob-' +$env:COMPUTERNAME) -ScriptBlock {
            (Get-Date).ToString()
        }
    }
}
$j = Invoke-Command @invokeCommandSplat
# To confirm that these job objects are from the remote machines, run Get-Job to show no
# local jobs running.
Get-Job`
# Display the three job objects in $j. Note that the Localhost location is not the local
# computer, but instead localhost as it relates to the job on each Server.
$j

Id   Name               State      HasMoreData   Location   Command
--   ----               -----      -----------   --------   -------
1    MyJob-Server01     Completed  True          Localhost  (Get-Date).ToString()
2    MyJob-Server02     Completed  True          Localhost  (Get-Date).ToString()
3    MyJob-Server03     Completed  True          Localhost  (Get-Date).ToString()

# Use Invoke-Command to run a Receive-Job command in each of the sessions in the $s
# variable and save the results in the $results variable. The Receive-Job command must be
# run in each session because the jobs were run locally on each server.
$results = Invoke-Command -Session $s -ScriptBlock {
    Receive-Job -Name $('MyJob-' +$env:COMPUTERNAME)
}

3/22/2021 7:41:47 PM
3/22/2021 7:41:47 PM
3/22/2021 9:41:47 PM

Contoh ini menunjukkan cara mendapatkan hasil pekerjaan latar belakang yang dijalankan pada tiga komputer jarak jauh. Tidak seperti contoh sebelumnya, menggunakan Invoke-Command untuk menjalankan Start-Job perintah benar-benar memulai tiga pekerjaan independen pada masing-masing dari tiga komputer. Akibatnya, perintah mengembalikan tiga objek pekerjaan yang mewakili tiga pekerjaan yang dijalankan secara lokal pada tiga komputer yang berbeda.

Contoh 5: Mengakses pekerjaan anak

Parameter -Keep mempertahankan status aliran agregat pekerjaan sehingga dapat dilihat lagi. Tanpa parameter ini, semua data aliran agregat dihapus ketika pekerjaan diterima. Untuk informasi selengkapnya, lihat about_Job_Details

Catatan

Aliran agregat mencakup aliran semua pekerjaan anak. Anda masih dapat menjangkau aliran data individual melalui objek pekerjaan dan objek pekerjaan anak.

Start-Job -Name TestJob -ScriptBlock {dir C:\, Z:\}
# Without the Keep parameter, aggregated child job data is displayed once.
# Then destroyed.
Receive-Job -Name TestJob

Directory: C:\

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-r---        1/24/2019   7:11 AM                Program Files
d-r---        2/13/2019   8:32 AM                Program Files (x86)
d-r---        10/3/2018  11:47 AM                Users
d-----         2/7/2019   1:52 AM                Windows
Cannot find drive. A drive with the name 'Z' does not exist.
    + CategoryInfo          : ObjectNotFound: (Z:String) [Get-ChildItem], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
    + PSComputerName        : localhost

# It would seem that the child job data is gone.
Receive-Job -Name TestJob



# Using the object model, you can still retrieve child job data and streams.
$job = Get-Job -Name TestJob
$job.ChildJobs[0].Error

Cannot find drive. A drive with the name 'Z' does not exist.
    + CategoryInfo          : ObjectNotFound: (Z:String) [Get-ChildItem], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
    + PSComputerName        : localhost

Parameter

-AutoRemoveJob

Menunjukkan bahwa cmdlet ini menghapus pekerjaan setelah mengembalikan hasil pekerjaan. Jika pekerjaan memiliki lebih banyak hasil, pekerjaan masih dihapus, tetapi Receive-Job menampilkan pesan.

Parameter ini hanya berfungsi pada jenis pekerjaan kustom. Ini dirancang untuk instans jenis pekerjaan yang menyimpan pekerjaan atau jenis di luar sesi, seperti instans pekerjaan terjadwal.

Parameter ini tidak dapat digunakan tanpa parameter Tunggu .

Parameter ini diperkenalkan di Windows PowerShell 3.0.

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

-ComputerName

Menentukan array nama komputer.

Parameter ini memilih dari antara hasil pekerjaan yang disimpan di komputer lokal. Ini tidak mendapatkan data untuk pekerjaan yang dijalankan di komputer jarak jauh. Untuk mendapatkan hasil pekerjaan yang disimpan di komputer jarak jauh, gunakan Invoke-Command cmdlet untuk menjalankan Receive-Job perintah dari jarak jauh.

Jenis:String[]
Alias:Cn
Position:1
Nilai default:All computers available
Diperlukan:False
Terima input alur:True
Terima karakter wildcard:True

-Force

Menunjukkan bahwa cmdlet ini terus menunggu jika pekerjaan dalam status Ditangguhkan atau Terputus . Secara default, parameter Receive-Job Tunggu pengembalian, atau mengakhiri penantian, saat pekerjaan berada di salah satu status berikut:

  • Selesai
  • Gagal
  • Dihentikan
  • Ditangguhkan
  • Terputus.

Parameter Paksa hanya valid ketika parameter Tunggu juga digunakan dalam perintah .

Parameter ini diperkenalkan di Windows PowerShell 3.0.

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

-Id

Menentukan array ID. Cmdlet ini mendapatkan hasil pekerjaan dengan ID yang ditentukan.

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

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

-InstanceId

Menentukan array ID instans. Cmdlet ini mendapatkan hasil pekerjaan dengan ID instans yang ditentukan.

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

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

-Job

Menentukan pekerjaan yang hasilnya sedang diambil.

Masukkan variabel yang berisi pekerjaan atau perintah yang mendapatkan pekerjaan. Anda juga dapat menyalurkan objek pekerjaan ke Receive-Job.

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

-Keep

Menunjukkan bahwa cmdlet ini menyimpan data aliran agregat dalam sistem, bahkan setelah Anda menerimanya. Secara default, data aliran agregat dihapus setelah dilihat dengan Receive-Job.

Menutup sesi, atau menghapus pekerjaan dengan Remove-Job cmdlet juga menghapus data aliran agregat.

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

-Location

Menentukan array lokasi. Cmdlet ini hanya mendapatkan hasil pekerjaan di lokasi yang ditentukan.

Jenis:String[]
Position:1
Nilai default:All locations
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-Name

Menentukan array nama yang mudah diingat. Cmdlet ini mendapatkan hasil pekerjaan yang memiliki nama yang ditentukan. Karakter kartubebas didukung.

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

-NoRecurse

Menunjukkan bahwa cmdlet ini hanya mendapatkan hasil dari pekerjaan yang ditentukan. Secara default, Receive-Job juga mendapatkan hasil dari semua pekerjaan anak dari pekerjaan yang ditentukan.

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

-Session

Menentukan array sesi. Cmdlet ini mendapatkan hasil pekerjaan yang dijalankan dalam sesi PowerShell (PSSession) yang ditentukan. Masukkan variabel yang berisi PSSession atau perintah yang mendapatkan PSSession, seperti Get-PSSession perintah.

Jenis:PSSession[]
Position:1
Nilai default:All sessions
Diperlukan:False
Terima input alur:True
Terima karakter wildcard:False

-Wait

Menunjukkan bahwa cmdlet ini menekan prompt perintah hingga semua hasil pekerjaan diterima. Secara default, Receive-Job segera mengembalikan hasil yang tersedia.

Secara default, parameter Tunggu menunggu hingga pekerjaan berada di salah satu status berikut:

  • Selesai
  • Gagal
  • Dihentikan
  • Ditangguhkan
  • Terputus

Untuk mengarahkan parameter Tunggu untuk terus menunggu jika status pekerjaan Ditangguhkan atau Terputus, gunakan parameter Paksa bersama dengan parameter Tunggu .

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

-WriteEvents

Menunjukkan bahwa cmdlet ini melaporkan perubahan dalam status pekerjaan saat menunggu pekerjaan selesai.

Parameter ini hanya valid ketika parameter Tunggu digunakan dalam perintah dan parameter Keep dihilangkan.

Parameter ini diperkenalkan di Windows PowerShell 3.0.

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

-WriteJobInResults

Menunjukkan bahwa cmdlet ini mengembalikan objek pekerjaan diikuti oleh hasilnya.

Parameter ini hanya valid ketika parameter Tunggu digunakan dalam perintah dan parameter Keep dihilangkan.

Parameter ini diperkenalkan di Windows PowerShell 3.0.

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

Input

Job

Anda dapat menyalurkan objek pekerjaan ke cmdlet ini.

Output

PSObject

Cmdlet ini mengembalikan hasil perintah dalam pekerjaan.

Catatan

PowerShell menyertakan alias berikut untuk Receive-Job:

  • Semua platform:
    • rcjb