about_Scheduled_Jobs_Troubleshooting
Korte beschrijving
Uitleg over het oplossen van problemen met geplande taken
Lange beschrijving
In dit document worden enkele van de problemen beschreven die kunnen optreden bij het gebruik van de geplande taakfuncties van PowerShell en worden oplossingen voor deze problemen voorgesteld.
Voordat u geplande PowerShell-taken gebruikt, raadpleegt u about_Scheduled_Jobs en de gerelateerde geplande taken over onderwerpen.
Zie PSScheduledJob voor meer informatie over de cmdlets in de PSScheduledJob-module.
Kan geen taakresultaten vinden
Basismethode voor het ophalen van taakresultaten in PowerShell
Wanneer een geplande taak wordt uitgevoerd, wordt er een exemplaar van de geplande taak gemaakt. Gebruik de taak-cmdlets om de resultaten van geplande taakexemplaren weer te geven, te beheren en op te halen.
Notitie
Als u de taak-cmdlets wilt gebruiken voor exemplaren van geplande taken, moet de PSScheduledJob-module worden geïmporteerd in de sessie. Als u de PSScheduledJob-module wilt importeren, typt Import-Module PSScheduledJob
of gebruikt u een geplande taak-cmdlet, zoals Get-ScheduledJob
.
Gebruik de Get-Job
cmdlet om een lijst op te halen met alle exemplaren van een geplande taak.
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
De Get-Job
cmdlet verzendt ProcessJob-objecten in de pijplijn. De Format-Table
cmdlet bevat de eigenschappen Name, ID en PSBeginTime van een gepland taakexemplaren in een 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
Gebruik de Receive-Job
cmdlet om de resultaten van een exemplaar van een geplande taak op te halen. Met de volgende opdracht worden de resultaten opgehaald van het nieuwste exemplaar van de ProcessJob (ID = 50).
Receive-Job -ID 50
Basismethode voor het vinden van taakresultaten op schijf
Als u geplande taken wilt beheren, gebruikt u de taak-cmdlets, zoals Get-Job
en Receive-Job
.
Als Get-Job
het taakexemplaren niet wordt opgehaald of Receive-Job
de taakresultaten niet worden opgehaald, kunt u zoeken in de uitvoeringsgeschiedenisbestanden voor de taak op schijf.
De uitvoeringsgeschiedenis bevat een record van alle geactiveerde taakexemplaren.
Controleer of er een map met een tijdstempel in de map voor een geplande taak in het volgende pad staat:
$HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob\<ScheduledJobName>\Output
Voorbeeld:
C:\Users<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob\<ScheduledJobName>\Output
De cmdlet haalt bijvoorbeeld Get-ChildItem
de uitvoeringsgeschiedenis op van de schijf van de geplande ProcessJob-taak .
$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
Elke tijdstempelmap vertegenwoordigt een taakexemplaren. De resultaten van elk taakexemplaren worden opgeslagen in een Results.xml-bestand in de map met de naam van de tijdstempel.
Met de volgende opdracht worden bijvoorbeeld de Results.xml bestanden voor elk opgeslagen exemplaar van de geplande processtaaktaak opgeslagen. Als het Results.xml bestand ontbreekt, kan PowerShell de taakresultaten niet retourneren of weergeven.
$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
De taak-cmdlet kan mogelijk geen geplande taakexemplaren of hun resultaten ophalen omdat de PSScheduledJob-module niet in de sessie wordt geïmporteerd.
Notitie
Voordat u een taak-cmdlet op geplande taakexemplaren gebruikt, controleert u of de PSScheduledJob-module is opgenomen in de sessie. Zonder de PSScheduledJob-module kunnen de taak-cmdlets geen geplande taakexemplaren of hun resultaten ophalen.
De PSScheduledJob-module importeren:
Import-Module PSScheduledJob
De resultaten van de cmdlet Receive-Job zijn mogelijk al geretourneerd
Als Receive-Job
er geen resultaten van het taakexemplaren worden geretourneerd, kan dit komen doordat een Receive-Job
opdracht is uitgevoerd voor dat taakexemplaren in de huidige sessie zonder de parameter Keep .
Wanneer u Receive-Job
zonder de parameter Keep gebruikt, Receive-Job
retourneert u de taakresultaten en stelt u de eigenschap HasMoreData van het taakexemplaren in op False. De waarde False betekent dat Receive-Job
de resultaten van de taak zijn geretourneerd en dat het exemplaar geen resultaten meer heeft om te retourneren. Deze instelling is geschikt voor standaardachtergrondtaken, maar niet voor exemplaren van geplande taken, die op schijf worden opgeslagen.
Als u de resultaten van het taakexemplaren opnieuw wilt ophalen, start u een nieuwe PowerShell-sessie door te typen PowerShell
. Importeer de PSScheduledJob-module en probeer de Receive-Job
opdracht opnieuw.
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
De parameter Keep gebruiken om resultaten meer dan één keer in een sessie op te halen
Als u het resultaat van een taakexemplaren meer dan één keer in een sessie wilt ophalen, gebruikt u de parameter Keep van de Receive-Job
cmdlet.
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
De geplande taak is mogelijk beschadigd
Als een geplande taak beschadigd raakt, verwijdert PowerShell de beschadigde geplande taak en de resultaten ervan. U kunt de resultaten van een beschadigde geplande taak niet herstellen.
Gebruik de Get-ScheduledJob
cmdlet om te bepalen of er nog steeds een geplande taak bestaat.
Get-ScheduledJob
Het aantal resultaten kan de ExecutionHistoryLength hebben overschreden
De eigenschap ExecutionHistoryLength van een geplande taak bepaalt hoeveel taakexemplaren en de bijbehorende resultaten worden opgeslagen op schijf. De standaardwaarde is 32. Wanneer het aantal exemplaren van een geplande taak deze waarde overschrijdt, verwijdert PowerShell het oudste taakexemplaren om ruimte te maken voor elk nieuwe taakexemplaren.
Gebruik de volgende opdrachtindeling om de waarde van de eigenschap ExecutionHistoryLength van een geplande taak op te halen:
(Get-ScheduledJob <JobName>).ExecutionHistoryLength
Met de volgende opdracht wordt bijvoorbeeld de waarde opgehaald van de eigenschap ExecutionHistoryLength van de geplande ProcessJob-taak .
(Get-ScheduledJob ProcessJob).ExecutionHistoryLength
Als u de waarde van de eigenschap ExecutionHistoryLength wilt instellen of wijzigen, gebruikt u de parameter MaxResultCount van de Register-ScheduledJob
en Set-ScheduledJob
cmdlets.
Met de volgende opdracht wordt de waarde van de eigenschap ExecutionHistoryLength verhoogd naar 50.
Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 50
De resultaten van het taakexemplaren zijn mogelijk verwijderd
Met de parameter ClearExecutionHistory van de Set-ScheduledJob
cmdlet wordt de uitvoeringsgeschiedenis van een taak verwijderd. U kunt deze functie gebruiken om schijfruimte vrij te maken of resultaten te verwijderen die niet nodig zijn, of die al zijn gebruikt, geanalyseerd of opgeslagen op een andere locatie.
Als u de uitvoeringsgeschiedenis van een geplande taak wilt verwijderen, gebruikt u de parameter ClearExecutionHistory van de geplande taak.
Met de volgende opdracht wordt de uitvoeringsgeschiedenis van de geplande ProcessJob-taak verwijderd.
Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
Met de Remove-Job
cmdlet worden ook taakresultaten verwijderd. Wanneer u Remove-Job
een geplande taak verwijdert, worden alle exemplaren van de taak op schijf verwijderd, inclusief de uitvoeringsgeschiedenis en alle taakresultaten.
Taken die zijn gestart met de cmdlet Start-Job, worden niet opgeslagen op schijf
Wanneer u Start-Job
een geplande taak start in plaats van een taaktrigger te gebruiken, Start-Job
start u een standaardachtergrondtaak. De achtergrondtaak en de resultaten worden niet opgeslagen in de uitvoeringsgeschiedenis van de taak op schijf.
U kunt de Get-Job
cmdlet gebruiken om de taak en de Receive-Job
cmdlet op te halen om de taakresultaten op te halen, maar de resultaten zijn alleen beschikbaar totdat u ze ontvangt, tenzij u de parameter Keep van de Receive-Job
cmdlet gebruikt.
Daarnaast zijn achtergrondtaken en hun resultaten sessiespecifiek; ze bestaan alleen in de sessie waarin ze worden gemaakt. Als u de taak verwijdert met Remove-Job
, sluit u de sessie of sluit u PowerShell, worden het taakexemplaren en de resultaten ervan verwijderd.
Geplande taak wordt niet uitgevoerd
Geplande taken worden niet automatisch uitgevoerd als de taak wordt geactiveerd of als de geplande taak is uitgeschakeld.
Gebruik de Get-ScheduledJob
cmdlet om de geplande taak op te halen. Controleer of de waarde van de eigenschap Ingeschakeld van de geplande taak Waar is.
Get-ScheduledJob ProcessJob
Id Name Triggers Command Enabled
-- ---- -------- ------- -------
4 ProcessJob {1, 2} Get-Process True
(Get-ScheduledJob ProcessJob).Enabled
True
Gebruik de Get-JobTrigger
cmdlet om de taaktriggers van de geplande taak op te halen.
Controleer of de waarde van de eigenschap Ingeschakeld van de taaktrigger waar is.
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
Geplande taken worden niet automatisch uitgevoerd als taaktriggers ongeldig zijn
Een taaktrigger kan bijvoorbeeld een datum in het verleden opgeven of een datum die niet plaatsvindt, zoals de 5e maandag van de maand.
Geplande taken worden niet automatisch uitgevoerd als niet aan de voorwaarden van de taaktrigger wordt voldaan of als niet aan de taakopties wordt voldaan.
Een geplande taak die alleen wordt uitgevoerd wanneer een bepaalde gebruiker zich aanmeldt bij de computer, wordt bijvoorbeeld niet uitgevoerd als die gebruiker zich niet aanmeldt of alleen extern verbinding maakt.
Bekijk de opties van de geplande taak en zorg ervoor dat ze tevreden zijn. Een geplande taak die vereist dat de computer niet actief is of een netwerkverbinding vereist, of een lange IdleDuration of een korte IdleTimeout heeft, kan nooit worden uitgevoerd.
Gebruik de Get-ScheduledJobOption
cmdlet om de taakopties en de bijbehorende waarden te onderzoeken.
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
Zie New-ScheduledJobOption voor beschrijvingen van de opties voor geplande taken.
Het geplande taakexemplaren zijn mogelijk mislukt
Als een geplande taakopdracht mislukt, rapporteert PowerShell deze onmiddellijk door een foutbericht te genereren. Als de taak echter mislukt wanneer Task Scheduler deze probeert uit te voeren, is de fout niet beschikbaar voor PowerShell.
Gebruik de volgende methoden om mislukte taken te detecteren en te corrigeren:
Controleer het gebeurtenislogboek van Task Scheduler op fouten. Als u het logboek wilt controleren, gebruikt u Logboeken of een PowerShell-opdracht, zoals de volgende:
Get-WinEvent -LogName Microsoft-Windows-TaskScheduler/Operational |
Where {$_.Message -like "fail"}
Controleer de taakrecord in Task Scheduler. Geplande PowerShell-taken worden opgeslagen in de volgende map Taak gepland:
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs
De geplande taak wordt mogelijk niet uitgevoerd vanwege onvoldoende machtigingen
Geplande taken worden uitgevoerd met de machtigingen van de gebruiker die de taak heeft gemaakt of de machtigingen van de gebruiker die is opgegeven door de referentieparameter in de Register-ScheduledJob
of Set-ScheduledJob
opdracht.
Als deze gebruiker niet gemachtigd is om de opdrachten of scripts uit te voeren, mislukt de taak.
Kan geplande taak of geplande taak niet ophalen is beschadigd
In zeldzame gevallen kunnen geplande taken beschadigd raken of interne tegenstrijdigheden bevatten die niet kunnen worden opgelost. Dit gebeurt meestal wanneer de XML-bestanden voor de geplande taak handmatig worden bewerkt, wat resulteert in ongeldige XML.
Wanneer een geplande taak beschadigd is, probeert PowerShell de geplande taak, de uitvoeringsgeschiedenis en de resultaten van de schijf te verwijderen.
Als de geplande taak niet kan worden verwijderd, krijgt u telkens wanneer u de Get-ScheduledJob
cmdlet uitvoert een foutbericht met een beschadigde taak.
Als u een beschadigde geplande taak wilt verwijderen, gebruikt u een van de volgende methoden:
Verwijder de <ScheduledJobName>
map voor de geplande taak. Verwijder de map ScheduledJob niet.
De locatie van de map:
$env:UserProfile\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>
Voorbeeld:
C:\Users<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>.
Gebruik Task Scheduler om de geplande taak te verwijderen. Geplande PowerShell-taken worden weergegeven in het volgende taakplannerpad:
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs<ScheduledJobName>
Taak-cmdlets kunnen niet consistent geplande taken vinden
Wanneer de PSScheduledJob-module zich niet in de huidige sessie bevindt, kunnen de taak-cmdlets geen geplande taken ophalen, starten of hun resultaten ophalen.
Als u de PSScheduledJob-module wilt importeren, typt Import-Module PSScheduledJob
of voert u een cmdlet in of haalt u deze op in de module, zoals de Get-ScheduledJob
cmdlet.
Vanaf PowerShell 3.0 worden modules automatisch geïmporteerd wanneer u een cmdlet in de module krijgt of gebruikt.
Wanneer de PSScheduledJob-module zich niet in de huidige sessie bevindt, is de volgende opdrachtreeks mogelijk.
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
Dit gedrag treedt op omdat de Get-ScheduledJob
opdracht automatisch de PSScheduledJob-module importeert en vervolgens de opdracht uitvoert.