about_Scheduled_Jobs_Troubleshooting

Rövid leírás

Az ütemezett feladatok problémáinak megoldása

Hosszú leírás

Ez a dokumentum a PowerShell ütemezett feladatfunkcióinak használatakor előforduló problémák némelyikét ismerteti, és megoldásokat javasol ezekre a problémákra.

A PowerShell ütemezett feladatainak használata előtt tekintse meg a témakörök about_Scheduled_Jobs és a kapcsolódó ütemezett feladatokat.

További információ a PSScheduledJob modulban található parancsmagokról: PSScheduledJob.

Nem található a feladat eredménye

Alapszintű módszer a feladatok eredményeinek lekérésére a PowerShellben

Amikor egy ütemezett feladat fut, létrehozza az ütemezett feladat egy példányát. Az ütemezett feladatpéldányok eredményeinek megtekintéséhez, kezeléséhez és lekéréséhez használja a Feladat parancsmagokat.

Feljegyzés

Ha a Feladat parancsmagokat ütemezett feladatok példányaihoz szeretné használni, a PSScheduledJob modult importálni kell a munkamenetbe. A PSScheduledJob modul importálásához írja be Import-Module PSScheduledJob vagy használja az ütemezett feladat parancsmagot, például Get-ScheduledJob.

Egy ütemezett feladat összes példányának listájának lekéréséhez használja a Get-Job parancsmagot.

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

A Get-Job parancsmag ProcessJob-objektumokat küld a folyamatba. A Format-Table parancsmag megjeleníti egy ütemezett feladatpéldány nevét, azonosítóját és PSBeginTime-tulajdonságait egy táblában.

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

Egy ütemezett feladat egy példányának eredményeinek lekéréséhez használja a Receive-Job parancsmagot. Az alábbi parancs lekéri a ProcessJob legújabb példányának eredményeit (ID = 50).

Receive-Job -ID 50

Alapszintű módszer a feladateredmények lemezen való kereséséhez

Az ütemezett feladatok kezeléséhez használja a feladat parancsmagjait, például Get-Job és Receive-Job.

Ha Get-Job nem kapja meg a feladatpéldányt, vagy Receive-Job nem kapja meg a feladat eredményeit, megkeresheti a feladat végrehajtási előzményfájljait a lemezen. A végrehajtási előzmények az összes aktivált feladatpéldány rekordját tartalmazzák.

Ellenőrizze, hogy van-e időbélyeg által elnevezett könyvtár a címtárban egy ütemezett feladathoz az alábbi elérési úton:

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

Példa:

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

A parancsmag például Get-ChildItem lekéri a ProcessJob ütemezett feladat lemezen végzett végrehajtási előzményeit.

$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

Minden időbélyeg által elnevezett könyvtár egy feladatpéldányt jelöl. Az egyes feladatpéldányok eredményeit egy Results.xml fájlba menti a rendszer az időbélyeg által elnevezett könyvtárban.

Az alábbi parancs például lekéri a Results.xml fájlokat a ProcessJob ütemezett feladat minden mentett példányához. Ha a Results.xml fájl hiányzik, a PowerShell nem tudja visszaadni vagy megjeleníteni a feladat eredményeit.

$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

Előfordulhat, hogy a feladatparancsmag nem tudja lekérni az ütemezett feladatpéldányokat vagy azok eredményeit, mert a PSScheduledJob modul nincs importálva a munkamenetbe.

Feljegyzés

Mielőtt feladatparancsmagot használ az ütemezett feladatpéldányokon, ellenőrizze, hogy a PSScheduledJob modul szerepel-e a munkamenetben. A PSScheduledJob modul nélkül a feladatparancsmagok nem tudják lekérni az ütemezett feladatpéldányokat vagy azok eredményeit.

A PSScheduledJob modul importálása:

Import-Module PSScheduledJob

Lehet, hogy a Fogadófeladat parancsmag már visszaadta az eredményeket

Ha Receive-Job nem ad vissza feladatpéldány-eredményeket, annak az lehet az oka, hogy az adott feladatpéldányhoz futtatott egy Receive-Job parancsot az aktuális munkamenetben a Keep paraméter nélkül.

Ha a Keep paraméter nélkül használjaReceive-Job, a feladat eredményeit adja vissza, Receive-Job és a feladatpéldány HasMoreData tulajdonságát False értékre állítja. A Hamis érték azt jelenti, hogy Receive-Job visszaadta a feladat eredményeit, és a példánynak nincs több eredmény. Ez a beállítás normál háttérfeladatokhoz megfelelő, de a lemezre mentett ütemezett feladatok esetében nem.

A feladatpéldány eredményeinek újbóli lekéréséhez kezdjen el egy új PowerShell-munkamenetet gépeléssel PowerShell. Importálja a PSScheduledJob modult, és próbálkozzon újra a Receive-Job paranccsal.

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

A Keep paraméter használata az eredmények többszöri lekéréséhez egy munkamenetben

Ha egy feladatpéldány eredményét többször szeretné lekérni egy munkamenetben, használja a Receive-Job parancsmag Keep paraméterét.

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

Előfordulhat, hogy az ütemezett feladat sérült

Ha egy ütemezett feladat megsérül, a PowerShell törli a sérült ütemezett feladatot és annak eredményeit. Sérült ütemezett feladat eredményei nem állíthatók helyre.

Annak megállapításához, hogy egy ütemezett feladat még létezik-e, használja a Get-ScheduledJob parancsmagot.

Get-ScheduledJob

Az eredmények száma meghaladhatta a ExecutionHistoryLength értéket

Az ütemezett feladatok ExecutionHistoryLength tulajdonsága határozza meg, hogy hány feladatpéldányt és azok eredményeit menti a rendszer a lemezre. Az alapértelmezett érték 32. Ha egy ütemezett feladat példányainak száma meghaladja ezt az értéket, a PowerShell törli a legrégebbi feladatpéldányt, hogy helyet biztosítsunk minden új feladatpéldánynak.

Egy ütemezett feladat ExecutionHistoryLength tulajdonságának értékének lekéréséhez használja a következő parancsformátumot:

(Get-ScheduledJob <JobName>).ExecutionHistoryLength

A következő parancs például lekéri a ProcessJob ütemezett feladat ExecutionHistoryLength tulajdonságának értékét.

(Get-ScheduledJob ProcessJob).ExecutionHistoryLength

A ExecutionHistoryLength tulajdonság értékének beállításához vagy módosításához használja a parancsmagok MaxResultCount paraméterét Set-ScheduledJobRegister-ScheduledJob.

Az alábbi parancs a ExecutionHistoryLength tulajdonság értékét 50-re növeli.

Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 50

Előfordulhat, hogy a feladatpéldány eredményei törölve lettek

A parancsmag ClearExecutionHistory paramétere Set-ScheduledJob törli egy feladat végrehajtási előzményeit. Ezzel a funkcióval szabadíthat fel lemezterületet, vagy törölheti azokat az eredményeket, amelyek nem szükségesek, vagy amelyeket már felhasználtak, elemeztek vagy más helyre mentettek.

Egy ütemezett feladat végrehajtási előzményeinek törléséhez használja az ütemezett feladat ClearExecutionHistory paraméterét.

Az alábbi parancs törli a ProcessJob ütemezett feladat végrehajtási előzményeit.

Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory

Emellett a parancsmag törli a Remove-Job feladat eredményeit. Ütemezett Remove-Job feladat törlésekor a rendszer törli a feladat összes példányát a lemezen, beleértve a végrehajtási előzményeket és az összes feladateredményt.

A Start-Job parancsmaggal indított feladatok nem kerülnek lemezre

Ha ütemezett feladat indítására használja Start-Job a feladat-eseményindító helyett egy Start-Job szabványos háttérfeladatot. A háttérfeladat és eredményei nincsenek tárolva a feladat végrehajtási előzményeiben a lemezen.

A parancsmaggal Get-Job lekérheti a feladatot és a Receive-Job parancsmagot a feladat eredményeinek lekéréséhez, de az eredmények csak addig érhetők el, amíg meg nem kapja őket, kivéve, ha a Receive-Job parancsmag Keep paraméterét használja.

Emellett a háttérfeladatok és eredményeik munkamenet-specifikusak; csak abban a munkamenetben léteznek, amelyben létrehozták őket. Ha törli a feladatot Remove-Job, zárja be a munkamenetet vagy zárja be a PowerShellt, a feladatpéldány és annak eredményei törlődnek.

Az ütemezett feladat nem fut

Az ütemezett feladatok nem futnak automatikusan, ha a feladat eseményindítói vagy az ütemezett feladat le van tiltva.

Az ütemezett feladat lekéréséhez használja a Get-ScheduledJob parancsmagot. Ellenőrizze, hogy az ütemezett feladat Engedélyezett tulajdonságának értéke Igaz-e.

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

Get-JobTrigger A parancsmaggal lekérheti az ütemezett feladat feladatindítóit. Ellenőrizze, hogy a feladat-eseményindító Engedélyezett tulajdonságának értéke Igaz-e.

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

Az ütemezett feladatok nem futnak automatikusan, ha a feladat-eseményindítók érvénytelenek

Egy feladat-eseményindító például megadhat egy múltbeli dátumot, vagy egy olyan dátumot, amely nem fordul elő, például a hónap 5. hétfője.

Az ütemezett feladatok nem futnak automatikusan, ha a feladat-eseményindító feltételei vagy a feladat beállításai nem teljesülnek.

Például egy ütemezett feladat, amely csak akkor fut, ha egy adott felhasználó bejelentkezik a számítógépre, nem fog futni, ha a felhasználó nem jelentkezik be, vagy csak távolról csatlakozik.

Vizsgálja meg az ütemezett feladat beállításait, és győződjön meg arról, hogy azok teljesülnek. Előfordulhat például, hogy egy ütemezett feladat, amely megköveteli, hogy a számítógép tétlen legyen, vagy hálózati kapcsolatot igényel, vagy hosszú IdleDuration vagy rövid IdleTimeout állapotú legyen, előfordulhat, hogy soha nem fut.

Get-ScheduledJobOption A parancsmaggal megvizsgálhatja a feladatbeállításokat és azok értékeit.

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

Az ütemezett feladat beállításainak leírását a New-ScheduledJobOption című témakörben talál.

Előfordulhat, hogy az ütemezett feladatpéldány meghiúsult

Ha egy ütemezett feladatparancs meghiúsul, a PowerShell azonnal jelenti azt egy hibaüzenet létrehozásával. Ha azonban a feladat meghiúsul, amikor a Feladatütemező megpróbálja futtatni, a hiba nem érhető el a PowerShell számára.

A feladathibák észleléséhez és javításához használja az alábbi módszereket:

Ellenőrizze a Feladatütemező eseménynaplójában a hibákat. A napló ellenőrzéséhez használja a Eseménynapló vagy egy PowerShell-parancsot, például a következőket:

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

Ellenőrizze a feladatrekordot a Feladatütemezőben. A PowerShell ütemezett feladatai a következő Feladatütemezési mappában vannak tárolva:

Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs

Előfordulhat, hogy az ütemezett feladat nem fut, mert nincs megfelelő engedély

Az ütemezett feladatok annak a felhasználónak az engedélyeivel futnak, aki létrehozta a feladatot, vagy annak a felhasználónak az engedélyeivel, akit a Hitelesítőadat paraméter ad Set-ScheduledJob meg a Register-ScheduledJob parancsban.

Ha a felhasználó nem rendelkezik engedéllyel a parancsok vagy szkriptek futtatására, a feladat meghiúsul.

Nem lehet lekérni az ütemezett feladatot, vagy sérült az ütemezett feladat

Ritkán az ütemezett feladatok megsérülhetnek, vagy olyan belső ellentmondásokat tartalmazhatnak, amelyek nem oldhatók fel. Ez általában akkor fordul elő, ha az ütemezett feladat XML-fájljait manuálisan szerkesztik, ami érvénytelen XML-t eredményez.

Ha egy ütemezett feladat sérült, a PowerShell megpróbálja törölni az ütemezett feladatot, annak végrehajtási előzményeit és eredményeit a lemezről.

Ha nem tudja eltávolítani az ütemezett feladatot, a parancsmag minden futtatásakor Get-ScheduledJob sérült feladat hibaüzenet jelenik meg.

Sérült ütemezett feladat eltávolításához használja az alábbi módszerek egyikét:

Törölje az <ScheduledJobName> ütemezett feladat könyvtárát. Ne törölje az Ütemezett feladat könyvtárat.

A könyvtár helye:

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

Példa:

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

Az ütemezett feladat törléséhez használja a Feladatütemezőt. A PowerShell ütemezett tevékenységei a következő Feladatütemező elérési úton jelennek meg:

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

A feladatparancsmagok nem találják meg következetesen az ütemezett feladatokat

Ha a PSScheduledJob modul nem szerepel az aktuális munkamenetben, a feladatparancsmagok nem tudnak ütemezett feladatokat lekérni, elindítani vagy lekérni az eredményeket.

A PSScheduledJob modul importálásához írja be Import-Module PSScheduledJob vagy futtassa vagy kérje le a modulban található parancsmagot, például a Get-ScheduledJob parancsmagot. A PowerShell 3.0-tól kezdve a modulok automatikusan importálódnak, amikor a modul bármely parancsmagja megjelenik vagy használatban van.

Ha a PSScheduledJob modul nincs az aktuális munkamenetben, a következő parancsütemezés lehetséges.

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

Ez a viselkedés azért fordul elő, mert a Get-ScheduledJob parancs automatikusan importálja a PSScheduledJob modult, majd futtatja a parancsot.

Lásd még