about_Scheduled_Jobs_Troubleshooting

Deskripsi singkat

Menjelaskan cara mengatasi masalah dengan pekerjaan terjadwal

Deskripsi panjang

Dokumen ini menjelaskan beberapa masalah yang mungkin Anda alami saat menggunakan fitur pekerjaan terjadwal PowerShell dan menyarankan solusi untuk masalah ini.

Sebelum menggunakan pekerjaan terjadwal PowerShell, lihat about_Scheduled_Jobs dan pekerjaan terjadwal terkait tentang topik.

Untuk informasi selengkapnya tentang cmdlet yang terkandung dalam modul PSScheduledJob , lihat PSScheduledJob.

Tidak dapat menemukan hasil pekerjaan

Metode dasar untuk mendapatkan hasil pekerjaan di PowerShell

Saat pekerjaan terjadwal berjalan, pekerjaan tersebut membuat instans pekerjaan terjadwal. Untuk melihat, mengelola, dan mendapatkan hasil instans pekerjaan terjadwal, gunakan cmdlet Pekerjaan.

Catatan

Untuk menggunakan cmdlet Pekerjaan pada instans pekerjaan terjadwal, modul PSScheduledJob harus diimpor ke dalam sesi. Untuk mengimpor modul PSScheduledJob , ketik Import-Module PSScheduledJob atau gunakan cmdlet pekerjaan terjadwal apa pun, seperti Get-ScheduledJob.

Untuk mendapatkan daftar semua instans pekerjaan terjadwal, gunakan Get-Job cmdlet .

Import-Module PSScheduledJob
Get-Job ProcessJob
Id     Name         PSJobTypeName   State         HasMoreData     Location
--     ----         -------------   -----         -----------     --------
43     ProcessJob   PSScheduledJob  Completed     False           localhost
44     ProcessJob   PSScheduledJob  Completed     False           localhost
45     ProcessJob   PSScheduledJob  Completed     False           localhost
46     ProcessJob   PSScheduledJob  Completed     False           localhost
47     ProcessJob   PSScheduledJob  Completed     False           localhost
48     ProcessJob   PSScheduledJob  Completed     False           localhost
49     ProcessJob   PSScheduledJob  Completed     False           localhost
50     ProcessJob   PSScheduledJob  Completed     False           localhost

Get-Job Cmdlet mengirim objek ProcessJob ke bawah alur. Format-Table Cmdlet menampilkan properti Nama, ID, dan PSBeginTime dari instans pekerjaan terjadwal dalam tabel.

Get-Job ProcessJob | Format-Table -Property Name, ID, PSBeginTime -Auto
Name       Id PSBeginTime
----       -- ---------
ProcessJob 43 11/2/2011 3:00:02 AM
ProcessJob 44 11/3/2011 3:00:02 AM
ProcessJob 45 11/4/2011 3:00:02 AM
ProcessJob 46 11/5/2011 3:00:02 AM
ProcessJob 47 11/6/2011 3:00:02 AM
ProcessJob 48 11/7/2011 12:00:01 AM
ProcessJob 49 11/7/2011 3:00:02 AM
ProcessJob 50 11/8/2011 3:00:02 AM

Untuk mendapatkan hasil instans pekerjaan terjadwal, gunakan Receive-Job cmdlet . Perintah berikut mendapatkan hasil instans terbaru ProcessJob (ID = 50).

Receive-Job -ID 50

Metode dasar untuk menemukan hasil pekerjaan pada disk

Untuk mengelola pekerjaan terjadwal, gunakan cmdlet pekerjaan, seperti Get-Job dan Receive-Job.

Jika Get-Job tidak mendapatkan instans pekerjaan atau Receive-Job tidak mendapatkan hasil pekerjaan, Anda dapat mencari file riwayat eksekusi untuk pekerjaan pada disk. Riwayat eksekusi berisi catatan semua instans pekerjaan yang dipicu.

Verifikasi bahwa ada direktori bernama tanda waktu di direktori untuk pekerjaan terjadwal di jalur berikut:

$HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob\<ScheduledJobName>\Output

Contohnya:

C:\Users<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob\<ScheduledJobName>\Output

Misalnya, Get-ChildItem cmdlet mendapatkan riwayat eksekusi pada disk dari pekerjaan terjadwal ProcessJob .

$Path = '$HOME\AppData\Local\Microsoft\Windows\PowerShell'
$Path += '\ScheduledJobs\ProcessJob\Output'
Get-ChildItem $Path
Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell
               \ScheduledJobs\ProcessJob\Output

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         11/2/2011   3:00 AM            20111102-030002-260
d----         11/3/2011   3:00 AM            20111103-030002-277
d----         11/4/2011   3:00 AM            20111104-030002-209
d----         11/5/2011   3:00 AM            20111105-030002-251
d----         11/6/2011   3:00 AM            20111106-030002-174
d----         11/7/2011  12:00 AM            20111107-000001-914
d----         11/7/2011   3:00 AM            20111107-030002-376

Setiap direktori bernama tanda waktu mewakili instans pekerjaan. Hasil setiap instans pekerjaan disimpan dalam file Results.xml di direktori bernama tanda waktu.

Misalnya, perintah berikut mendapatkan file Results.xml untuk setiap instans pekerjaan terjadwal ProcessJob yang disimpan. Jika file Results.xml hilang, PowerShell tidak dapat mengembalikan atau menampilkan hasil pekerjaan.

$Path = '$HOME\AppData\Local\Microsoft\Windows\PowerShell'
$Path += '\ScheduledJobs\ProcessJob\Output\*\Results.xml'
Get-ChildItem $Path
Directory: C:\Users\User01\Appdata\Local\Microsoft\Windows\PowerShell
               \ScheduledJobs\ProcessJob\Output

Cmdlet pekerjaan mungkin tidak dapat mendapatkan instans pekerjaan terjadwal atau hasilnya karena modul PSScheduledJob tidak diimpor ke dalam sesi.

Catatan

Sebelum menggunakan cmdlet pekerjaan pada instans pekerjaan terjadwal, verifikasi bahwa modul PSScheduledJob disertakan dalam sesi. Tanpa modul PSScheduledJob, cmdlet pekerjaan tidak dapat mendapatkan instans pekerjaan terjadwal atau hasilnya.

Untuk mengimpor modul PSScheduledJob :

Import-Module PSScheduledJob

Cmdlet Receive-Job mungkin sudah mengembalikan hasilnya

Jika Receive-Job tidak mengembalikan hasil instans pekerjaan, mungkin karena Receive-Job perintah telah dijalankan untuk instans pekerjaan tersebut dalam sesi saat ini tanpa parameter Keep .

Saat Anda menggunakan Receive-Job tanpa parameter Keep, Receive-Job mengembalikan hasil pekerjaan dan mengatur properti HasMoreData instans pekerjaan ke False. Nilai False berarti bahwa Receive-Job mengembalikan hasil pekerjaan dan instans tidak memiliki lebih banyak hasil untuk dikembalikan. Pengaturan ini sesuai untuk pekerjaan latar belakang standar, tetapi tidak untuk instans pekerjaan terjadwal, yang disimpan ke disk.

Untuk mendapatkan hasil instans pekerjaan lagi, mulai sesi PowerShell baru dengan mengetik PowerShell. Impor modul PSScheduledJob, dan coba perintah lagiReceive-Job.

Receive-Job -ID 50
#No results
PowerShell.exe
Windows PowerShell
Copyright (C) 2012 Microsoft Corporation. All rights reserved.
Import-Module PSScheduledJob
Receive-Job -ID 50
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  ProcessName
-------  ------    -----      ----- -----   ------     --  -----------
1213         33    12348      21676    88    25.71   1608  CcmExec
29            4     1168       2920    43     0.02    748  conhost
46            6     2208       4612    45     0.03   1640  conhost

Menggunakan parameter Keep untuk mendapatkan hasil lebih dari satu kali dalam sesi

Untuk mendapatkan hasil instans pekerjaan lebih dari satu kali dalam sesi, gunakan parameter Keep cmdlet Receive-Job .

Import-Module PSScheduledJob
Receive-Job -ID 50 -Keep
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  ProcessName
-------  ------    -----      ----- -----   ------     --  -----------
1213         33    12348      21676    88    25.71   1608  CcmExec
29            4     1168       2920    43     0.02    748  conhost
46            6     2208       4612    45     0.03   1640  conhost
Receive-Job -ID 50 -Keep
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  ProcessName
-------  ------    -----      ----- -----   ------     --  -----------
1213         33    12348      21676    88    25.71   1608  CcmExec
29            4     1168       2920    43     0.02    748  conhost
46            6     2208       4612    45     0.03   1640  conhost

Pekerjaan terjadwal mungkin rusak

Jika pekerjaan terjadwal rusak, PowerShell akan menghapus pekerjaan terjadwal yang rusak dan hasilnya. Anda tidak dapat memulihkan hasil pekerjaan terjadwal yang rusak.

Untuk menentukan apakah pekerjaan terjadwal masih ada, gunakan Get-ScheduledJob cmdlet .

Get-ScheduledJob

Jumlah hasil mungkin telah melebihi ExecutionHistoryLength

Properti ExecutionHistoryLength dari pekerjaan terjadwal menentukan berapa banyak instans pekerjaan, dan hasilnya, disimpan ke disk. Nilai defaultnya adalah 32. Ketika jumlah instans pekerjaan terjadwal melebihi nilai ini, PowerShell menghapus instans pekerjaan terlama untuk memberi ruang bagi setiap instans pekerjaan baru.

Untuk mendapatkan nilai properti ExecutionHistoryLength dari pekerjaan terjadwal, gunakan format perintah berikut:

(Get-ScheduledJob <JobName>).ExecutionHistoryLength

Misalnya, perintah berikut mendapatkan nilai properti ExecutionHistoryLength dari pekerjaan terjadwal ProcessJob .

(Get-ScheduledJob ProcessJob).ExecutionHistoryLength

Untuk mengatur atau mengubah nilai properti ExecutionHistoryLength , gunakan parameter MaxResultCount dari Register-ScheduledJob cmdlet dan Set-ScheduledJob .

Perintah berikut meningkatkan nilai properti ExecutionHistoryLength menjadi 50.

Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 50

Hasil instans pekerjaan mungkin telah dihapus

Parameter ClearExecutionHistory dari Set-ScheduledJob cmdlet menghapus riwayat eksekusi pekerjaan. Anda dapat menggunakan fitur ini untuk mengosongkan ruang disk atau menghapus hasil yang tidak diperlukan, atau sudah digunakan, dianalisis, atau disimpan di lokasi lain.

Untuk menghapus riwayat eksekusi pekerjaan terjadwal, gunakan parameter ClearExecutionHistory dari pekerjaan terjadwal.

Perintah berikut menghapus riwayat eksekusi pekerjaan terjadwal ProcessJob .

Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory

Selain itu Remove-Job , cmdlet menghapus hasil pekerjaan. Saat Anda menggunakan Remove-Job untuk menghapus pekerjaan terjadwal, pekerjaan akan menghapus semua instans pekerjaan pada disk, termasuk riwayat eksekusi dan semua hasil pekerjaan.

Pekerjaan yang dimulai dengan menggunakan cmdlet Start-Job tidak disimpan ke disk

Saat Anda menggunakan Start-Job untuk memulai pekerjaan terjadwal, alih-alih menggunakan pemicu pekerjaan, Start-Job memulai pekerjaan latar belakang standar. Pekerjaan latar belakang dan hasilnya tidak disimpan dalam riwayat eksekusi pekerjaan pada disk.

Anda dapat menggunakan Get-Job cmdlet untuk mendapatkan pekerjaan dan Receive-Job cmdlet untuk mendapatkan hasil pekerjaan, tetapi hasilnya hanya tersedia sampai Anda menerimanya, kecuali Anda menggunakan parameter Keep cmdlet Receive-Job .

Selain itu, pekerjaan latar belakang dan hasilnya khusus sesi; mereka hanya ada dalam sesi di mana mereka dibuat. Jika Anda menghapus pekerjaan dengan Remove-Job, tutup sesi atau tutup PowerShell, instans pekerjaan dan hasilnya akan dihapus.

Pekerjaan terjadwal tidak berjalan

Pekerjaan terjadwal tidak berjalan secara otomatis jika pekerjaan dipicu atau pekerjaan terjadwal dinonaktifkan.

Get-ScheduledJob Gunakan cmdlet untuk mendapatkan pekerjaan terjadwal. Verifikasi bahwa nilai properti Diaktifkan dari pekerjaan terjadwal adalah True.

Get-ScheduledJob ProcessJob
Id         Name            Triggers        Command         Enabled
--         ----            --------        -------         -------
4          ProcessJob      {1, 2}          Get-Process     True
(Get-ScheduledJob ProcessJob).Enabled
True

Get-JobTrigger Gunakan cmdlet untuk mendapatkan pemicu pekerjaan dari pekerjaan terjadwal. Verifikasi bahwa nilai properti Yang Diaktifkan dari pemicu pekerjaan adalah True.

Get-ScheduledJob ProcessJob | Get-JobTrigger
Id      Frequency    Time                   DaysOfWeek            Enabled
--      ---------    ----                   ----------            -------
1       Weekly       11/7/2011 5:00:00 AM   {Monday, Thursday}    True
2       Daily        11/7/2011 3:00:00 PM                         True
Get-ScheduledJob ProcessJob|Get-JobTrigger|Format-Table ID, Enabled -Auto
Id Enabled
-- -------
1    True
2    True

Pekerjaan terjadwal tidak berjalan secara otomatis jika pemicu pekerjaan tidak valid

Misalnya, pemicu pekerjaan mungkin menentukan tanggal di masa lalu atau tanggal yang tidak terjadi, seperti Senin ke-5 dalam sebulan.

Pekerjaan terjadwal tidak berjalan secara otomatis jika kondisi pemicu pekerjaan atau opsi pekerjaan tidak terpenuhi.

Misalnya, pekerjaan terjadwal yang hanya berjalan ketika pengguna tertentu masuk ke komputer tidak akan berjalan jika pengguna tersebut tidak masuk atau hanya tersambung dari jarak jauh.

Periksa opsi pekerjaan terjadwal dan pastikan bahwa mereka puas. Misalnya, pekerjaan terjadwal yang mengharuskan komputer diam atau memerlukan koneksi jaringan, atau memiliki IdleDuration yang panjang atau IdleTimeout singkat mungkin tidak pernah berjalan.

Get-ScheduledJobOption Gunakan cmdlet untuk memeriksa opsi pekerjaan dan nilainya.

Get-ScheduledJobOption -Name ProcessJob
StartIfOnBatteries     : False
StopIfGoingOnBatteries : True
WakeToRun              : True
StartIfNotIdle         : True
StopIfGoingOffIdle     : False
RestartOnIdleResume    : False
IdleDuration           : 00:10:00
IdleTimeout            : 01:00:00
ShowInTaskScheduler    : True
RunElevated            : False
RunWithoutNetwork      : True
DoNotAllowDemandStart  : False
MultipleInstancePolicy : IgnoreNew
JobDefinition          : Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition

Untuk deskripsi opsi pekerjaan terjadwal, lihat New-ScheduledJobOption.

Instans pekerjaan terjadwal mungkin gagal

Jika perintah pekerjaan terjadwal gagal, PowerShell segera melaporkannya dengan menghasilkan pesan kesalahan. Namun, jika pekerjaan gagal ketika Task Scheduler mencoba menjalankannya, kesalahan tidak tersedia untuk PowerShell.

Gunakan metode berikut untuk mendeteksi dan memperbaiki kegagalan pekerjaan:

Periksa log peristiwa Penjadwal Tugas untuk kesalahan. Untuk memeriksa log, gunakan perintah Pemantau Peristiwa atau PowerShell seperti berikut ini:

Get-WinEvent -LogName Microsoft-Windows-TaskScheduler/Operational |
 Where {$_.Message -like "fail"}

Periksa catatan pekerjaan di Penjadwal Tugas. Pekerjaan terjadwal PowerShell disimpan di folder Terjadwal Tugas berikut:

Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs

Pekerjaan terjadwal mungkin tidak berjalan karena izin yang tidak mencukup

Pekerjaan terjadwal berjalan dengan izin pengguna yang membuat pekerjaan atau izin pengguna yang ditentukan oleh parameter Kredensial dalam Register-ScheduledJob perintah atau Set-ScheduledJob .

Jika pengguna tersebut tidak memiliki izin untuk menjalankan perintah atau skrip, pekerjaan gagal.

Tidak dapat mendapatkan pekerjaan terjadwal atau pekerjaan terjadwal rusak

Pada kesempatan yang jarang terjadi, pekerjaan terjadwal dapat menjadi rusak atau mengandung kontradiksi internal yang tidak dapat diselesaikan. Biasanya, ini terjadi ketika file XML untuk pekerjaan terjadwal diedit secara manual, menghasilkan XML yang tidak valid.

Ketika pekerjaan terjadwal rusak, PowerShell mencoba menghapus pekerjaan terjadwal, riwayat eksekusinya, dan hasilnya dari disk.

Jika tidak dapat menghapus pekerjaan terjadwal, Anda akan mendapatkan pesan kesalahan pekerjaan yang rusak setiap kali Anda menjalankan Get-ScheduledJob cmdlet.

Untuk menghapus pekerjaan terjadwal yang rusak, gunakan salah satu metode berikut:

<ScheduledJobName> Hapus direktori untuk pekerjaan terjadwal. Jangan hapus direktori ScheduledJob .

Lokasi direktori:

$env:UserProfile\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>

Contohnya:

C:\Users<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>.

Gunakan Penjadwal Tugas untuk menghapus pekerjaan terjadwal. Tugas terjadwal PowerShell muncul di jalur Penjadwal Tugas berikut:

Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>

Cmdlet pekerjaan tidak dapat menemukan pekerjaan terjadwal secara konsisten

Ketika modul PSScheduledJob tidak berada dalam sesi saat ini, cmdlet pekerjaan tidak dapat mendapatkan pekerjaan terjadwal, memulainya, atau mendapatkan hasilnya.

Untuk mengimpor modul PSScheduledJob , ketik Import-Module PSScheduledJob atau jalankan atau dapatkan cmdlet apa pun dalam modul, seperti Get-ScheduledJob cmdlet. Dimulai di PowerShell 3.0, modul diimpor secara otomatis saat Anda mendapatkan atau menggunakan cmdlet apa pun dalam modul.

Ketika modul PSScheduledJob tidak berada dalam sesi saat ini, urutan perintah berikut dimungkinkan.

Get-Job ProcessJob
Get-Job : The command cannot find the job because the job name
ProcessJob was not found.
Verify the value of the Name parameter, and then try the command again.
+ CategoryInfo          : ObjectNotFound: (ProcessJob:String) [Get-Job],
PSArgumentException
+ FullyQualifiedErrorId : JobWithSpecifiedNameNotFound,Microsoft.PowerShell.
Commands.GetJobCommand
Get-Job
Get-ScheduledJob ProcessJob
Id         Name            Triggers        Command      Enabled
--         ----            --------        -------      -------
4          ProcessJob      {1}             Get-Process  True
Get-Job ProcessJob
Id     Name         PSJobTypeName   State       HasMoreData     Location
--     ----         -------------   -----       -----------     --------
43     ProcessJob   PSScheduledJob  Completed   True            localhost
44     ProcessJob   PSScheduledJob  Completed   True            localhost
45     ProcessJob   PSScheduledJob  Completed   True            localhost
46     ProcessJob   PSScheduledJob  Completed   True            localhost
47     ProcessJob   PSScheduledJob  Completed   True            localhost
48     ProcessJob   PSScheduledJob  Completed   True            localhost
49     ProcessJob   PSScheduledJob  Completed   True            localhost
50     ProcessJob   PSScheduledJob  Completed   True            localhost

Perilaku ini terjadi karena Get-ScheduledJob perintah secara otomatis mengimpor modul PSScheduledJob , lalu menjalankan perintah.

Lihat juga