Aracılığıyla paylaş


about_Scheduled_Jobs_Troubleshooting

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ü içeri aktarmak için, gibi Get-ScheduledJobherhangi bir zamanlanmış iş cmdlet'ini yazın Import-Module PSScheduledJob veya 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. cmdlet'i Format-Table tablodaki zamanlanmış bir iş örneğinin Name, ID ve 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 Receive-Jobgibi Get-Job iş cmdlet'lerini kullanın.

İş örneğini almazsa veya Receive-Job iş sonuçlarını almazsaGet-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.

Keep parametresi olmadan kullandığınızdaReceive-Job, 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 PowerShellyeni 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 parametresini Receive-Job kullanın.

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 Set-ScheduledJob cmdlet'lerininRegister-ScheduledJob MaxResultCount parametresini kullanın.

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 Set-ScheduledJob ClearExecutionHistory 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-Jobiş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 Set-ScheduledJob komutundaki Credential parametresi Register-ScheduledJob tarafından 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ü içeri aktarmak için, modülde cmdlet gibi Get-ScheduledJob herhangi bir cmdlet yazın Import-Module PSScheduledJob veya çalıştırın veya 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.