Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kısa açıklama
Zamanlanmış işlerle ilgili sorunların nasıl çözüleceğini açıklar
Uzun açıklama
Bu belge, PowerShell'in zamanlanmış iş özelliklerini kullanırken karşılaşabileceğiniz bazı sorunları açıklar ve bu sorunlara çözüm önerir.
PowerShell zamanlanmış işlerini kullanmadan önce about_Scheduled_Jobs ve konularla ilgili zamanlanmış işler konusuna bakın.
PSScheduledJob modülünde yer alan cmdlet'ler hakkında daha fazla bilgi için bkz. PSScheduledJob.
İş sonuçları bulunamıyor
PowerShell'de iş sonuçlarını almak için temel yöntem
Zamanlanmış bir iş çalıştırıldığında, zamanlanmış işin bir örneğini oluşturur. Zamanlanmış iş örneklerini görüntülemek, yönetmek ve sonuçlarını almak için İş cmdlet'lerini kullanın.
Not
zamanlanmış işlerin örneklerinde İş cmdlet'lerini kullanmak için PSScheduledJob modülü oturuma aktarılmalıdır. PSScheduledJob modülünü kullanın.
Zamanlanmış işin tüm örneklerinin listesini almak için cmdlet'ini Get-Job
kullanın.
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
Cmdlet, Get-Job
processjob nesnelerini işlem hattına gönderir.
Format-Table
cmdlet'i bir tablodaki zamanlanmış iş örneğinin Adı, Kimliğive PSBeginTime özelliklerini görüntüler.
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
Zamanlanmış bir işin örneğinin sonuçlarını almak için cmdlet'ini Receive-Job
kullanın. Aşağıdaki komut, ProcessJob'un en yeni örneğinin (ID = 50) sonuçlarını alır.
Receive-Job -Id 50
Diskte iş sonuçlarını bulmak için temel yöntem
Zamanlanmış işleri yönetmek için ve Get-Job
gibi Receive-Job
iş cmdlet'lerini kullanın.
İş örneğini almazsa veya Get-Job
iş sonuçlarını almazsaReceive-Job
, diskte işin yürütme geçmişi dosyalarında arama yapabilirsiniz.
Yürütme geçmişi, tetiklenen tüm iş örneklerinin kaydını içerir.
Aşağıdaki yolda zamanlanmış bir iş için dizinde zaman damgası adlı bir dizin olduğunu doğrulayın:
$HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob\<ScheduledJobName>\Output
Örneğin:
C:\Users<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob\<ScheduledJobName>\Output
Örneğin, cmdlet ProcessJob Get-ChildItem
zamanlanmış işinin disk üzerinde yürütme geçmişini alır.
$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
Zaman damgası adlandırılmış her dizin bir iş örneğini temsil eder. Her iş örneğinin sonuçları zaman damgası adlı dizindeki bir Results.xml dosyasına kaydedilir.
Örneğin, aşağıdaki komut ProcessJob zamanlanmış işinin kaydedilmiş her örneği için Results.xml dosyalarını alır. Results.xml dosyası eksikse PowerShell iş sonuçlarını döndüremez veya görüntüleyemez.
$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
PSScheduledJob modülü oturuma aktarılmadığından iş cmdlet'i zamanlanmış iş örneklerini veya sonuçlarını alamayabilir.
Not
Zamanlanmış iş örneklerinde iş cmdlet'ini kullanmadan önce PSScheduledJob modülünün oturuma dahil olduğunu doğrulayın. PSScheduledJob modülü olmadan, iş cmdlet'leri zamanlanmış iş örneklerini veya sonuçlarını alamaz.
PSScheduledJob modülünü içeri aktarmak için:
Import-Module PSScheduledJob
Receive-Job cmdlet'i sonuçları zaten döndürmüş olabilir
İş örneği sonuçlarını döndürmezseReceive-Job
, bunun nedeni geçerli oturumda Keep parametresi olmadan bu iş örneği için bir Receive-Job
komutun çalıştırılmış olması olabilir.
KeepReceive-Job
kullandığınızda, Receive-Job
iş sonuçlarını döndürür ve iş örneğinin HasMoreData özelliğini False olarak ayarlar.
False değeri, işin sonuçlarını döndürdüğünü Receive-Job
ve örneğin döndürülecek başka sonuç kalmadığı anlamına gelir. Bu ayar standart arka plan işleri için uygundur, ancak diske kaydedilen zamanlanmış işlerin örnekleri için uygun değildir.
İş örneği sonuçlarını yeniden almak için yazarak PowerShell
yeni bir PowerShell oturumu başlatın.
PSScheduledJob modülünü içeri aktarın Receive-Job
ve komutu yeniden deneyin.
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
Oturumda birden çok kez sonuç almak için Keep parametresini kullanma
Bir oturumda bir iş örneğinin sonucunu birden fazla kez almak için cmdlet'in Keep.
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
Zamanlanmış iş bozulmuş olabilir
Zamanlanmış bir iş bozulursa, PowerShell bozuk zamanlanmış işi ve sonuçlarını siler. Bozuk bir zamanlanmış işin sonuçlarını kurtaramazsınız.
Zamanlanmış bir işin hala var olup olmadığını belirlemek için cmdlet'ini Get-ScheduledJob
kullanın.
Get-ScheduledJob
Sonuç sayısı ExecutionHistoryLength değerini aşmış olabilir
Zamanlanmış bir işin ExecutionHistoryLength özelliği, kaç iş örneğinin ve sonuçlarının diske kaydedildiğini belirler. Varsayılan değer 32'dir. Zamanlanmış bir işin örnek sayısı bu değeri aştığında, PowerShell her yeni iş örneğine yer açmak için en eski iş örneğini siler.
Zamanlanmış bir işin ExecutionHistoryLength özelliğinin değerini almak için aşağıdaki komut biçimini kullanın:
(Get-ScheduledJob <JobName>).ExecutionHistoryLength
Örneğin, aşağıdaki komut ProcessJob zamanlanmış işinin ExecutionHistoryLength özelliğinin değerini alır.
(Get-ScheduledJob ProcessJob).ExecutionHistoryLength
ExecutionHistoryLength özelliğinin değerini ayarlamak veya değiştirmek için ve cmdlet'lerininRegister-ScheduledJob
MaxResultCountSet-ScheduledJob
.
Aşağıdaki komut ExecutionHistoryLength özelliğinin değerini 50'ye yükseltir.
Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 50
İş örneği sonuçları silinmiş olabilir
cmdlet'in parametresi işin yürütme geçmişini siler. Diskte yer açmak veya gerekli olmayan, zaten kullanılan, analiz edilen veya farklı bir konuma kaydedilen sonuçları silmek için bu özelliği kullanabilirsiniz.
Zamanlanmış işin yürütme geçmişini silmek için zamanlanmış işin ClearExecutionHistory parametresini kullanın.
Aşağıdaki komut, ProcessJob zamanlanmış işinin yürütme geçmişini siler.
Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
Remove-Job
Ayrıca, cmdlet iş sonuçlarını siler. Zamanlanmış bir işi silmek için kullandığınızda Remove-Job
, yürütme geçmişi ve tüm iş sonuçları dahil olmak üzere disk üzerindeki işin tüm örnekleri silinir.
Start-Job cmdlet'i kullanılarak başlatılan işler diske kaydedilmez
Start-Job
zamanlanmış bir işi başlatmak için kullandığınızda, iş tetikleyicisi Start-Job
kullanmak yerine standart bir arka plan işi başlatır. Arka plan işi ve sonuçları diskteki işin yürütme geçmişinde depolanmaz.
cmdlet'ini Get-Job
kullanarak işi ve Receive-Job
cmdlet'i kullanarak iş sonuçlarını alabilirsiniz, ancak cmdlet'in Keep parametresini Receive-Job
kullanmadığınız sürece sonuçlar yalnızca siz alınana kadar kullanılabilir.
Ayrıca arka plan işleri ve sonuçları oturuma özeldir; yalnızca oluşturuldukları oturumda bulunurlar. ile Remove-Job
işi silerseniz oturumu kapatın veya PowerShell'i kapatın, iş örneği ve sonuçları silinir.
Zamanlanmış iş çalışmıyor
İş tetiklenirse veya zamanlanan iş devre dışı bırakılırsa zamanlanmış işler otomatik olarak çalışmaz.
Get-ScheduledJob
Zamanlanmış işi almak için cmdlet'ini kullanın. Zamanlanan işin Enabled özelliğinin değerinin True olduğunu doğrulayın.
Get-ScheduledJob ProcessJob
Id Name Triggers Command Enabled
-- ---- -------- ------- -------
4 ProcessJob {1, 2} Get-Process True
(Get-ScheduledJob ProcessJob).Enabled
True
Get-JobTrigger
Zamanlanmış işin iş tetikleyicilerini almak için cmdlet'ini kullanın.
İş tetikleyicisinin Enabled özelliğinin değerinin True olduğunu doğrulayın.
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
İş tetikleyicileri geçersizse zamanlanmış işler otomatik olarak çalışmaz
Örneğin, bir iş tetikleyicisi geçmişteki bir tarihi veya ayın 5. Pazartesi günü gibi gerçekleşmeyen bir tarihi belirtebilir.
İş tetikleyicisinin koşulları veya iş seçenekleri karşılanmazsa zamanlanmış işler otomatik olarak çalışmaz.
Örneğin, yalnızca belirli bir kullanıcı bilgisayarda oturum açtığında çalışan zamanlanmış bir iş, kullanıcı oturum açmazsa veya yalnızca uzaktan bağlanırsa çalışmaz.
Zamanlanan işin seçeneklerini inceleyin ve uygun olduklarından emin olun. Örneğin, bilgisayarın boşta olmasını veya ağ bağlantısı gerektiren ya da uzun bir IdleDuration veya kısa bir IdleTimeout'a sahip olan zamanlanmış bir iş hiçbir zaman çalışmayabilir.
Get-ScheduledJobOption
İş seçeneklerini ve değerlerini incelemek için cmdlet'ini kullanın.
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
Zamanlanan iş seçeneklerinin açıklamaları için bkz . New-ScheduledJobOption.
Zamanlanmış iş örneği başarısız olmuş olabilir
Zamanlanmış bir iş komutu başarısız olursa PowerShell bir hata iletisi oluşturarak bunu hemen bildirir. Ancak Görev Zamanlayıcı bunu çalıştırmaya çalıştığında iş başarısız olursa, hata PowerShell tarafından kullanılamaz.
İş hatalarını algılamak ve düzeltmek için aşağıdaki yöntemleri kullanın:
Görev Zamanlayıcı olay günlüğünde hatalar olup olmadığını denetleyin. Günlüğü denetlemek için Olay Görüntüleyicisi veya aşağıdaki gibi bir PowerShell komutu kullanın:
Get-WinEvent -LogName Microsoft-Windows-TaskScheduler/Operational |
Where {$_.Message -like "fail"}
Görev Zamanlayıcı'da iş kaydını denetleyin. PowerShell zamanlanmış işleri aşağıdaki Zamanlanmış Görev klasöründe depolanır:
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs
Zamanlanan iş yetersiz izin nedeniyle çalışmayabilir
Zamanlanmış işler, işi oluşturan kullanıcının izinleriyle veya veya komutundaki CredentialRegister-ScheduledJob
belirtilen kullanıcının izinleriyle çalışır.
Bu kullanıcının komutları veya betikleri çalıştırma izni yoksa, iş başarısız olur.
Zamanlanmış iş alınamıyor veya zamanlanmış iş bozuk
Nadir durumlarda, zamanlanmış işler bozulabilir veya çözümlenemeyen iç çelişkiler içerebilir. Bu durum genellikle zamanlanan işin XML dosyaları el ile düzenlendiğinde ve geçersiz XML ile sonuçlandığında ortaya çıkar.
Zamanlanmış bir iş bozulduğunda PowerShell zamanlanmış işi, yürütme geçmişini ve sonuçlarını diskten silmeye çalışır.
Zamanlanmış işi kaldıramazsa, cmdlet'i her çalıştırdığınızda Get-ScheduledJob
bozuk bir iş hata iletisi alırsınız.
Bozuk bir zamanlanmış işi kaldırmak için aşağıdaki yöntemlerden birini kullanın:
<ScheduledJobName>
Zamanlanan işin dizinini silin. ScheduledJob dizinini silmeyin.
Dizinin konumu:
$Env:USERPROFILE\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>
Örneğin:
C:\Users<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>.
Zamanlanmış işi silmek için Görev Zamanlayıcı'yı kullanın. PowerShell zamanlanmış görevleri aşağıdaki Görev Zamanlayıcı yolunda görünür:
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>
İş cmdlet'leri zamanlanmış işleri tutarlı bir şekilde bulamıyor
PSScheduledJob modülü geçerli oturumda olmadığında, iş cmdlet'leri zamanlanmış işleri alamaz, başlatamaz veya sonuçlarını alamaz.
PSScheduledJob modülünü alın. PowerShell 3.0'dan başlayarak modüldeki herhangi bir cmdlet'i aldığınızda veya kullandığınızda modüller otomatik olarak içeri aktarılır.
PSScheduledJob modülü geçerli oturumda olmadığında aşağıdaki komut dizisi mümkündür.
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
Bu davranış, komutun Get-ScheduledJob
PSScheduledJob modülünü otomatik olarak içeri aktarması ve ardından komutunu çalıştırması nedeniyle oluşur.
Ayrıca bkz.
PowerShell