Problemen met geplande taken oplossen
Korte beschrijving
Hierin wordt uitgelegd hoe u problemen met geplande taken kunt oplossen
Lange beschrijving
In dit document worden enkele problemen beschreven die u kunt ondervinden bij het gebruik van de functies voor geplande taken 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.
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 module PSScheduledJob worden geïmporteerd in de sessie. Als u de module PSScheduledJob wilt importeren, typt Import-Module PSScheduledJob
of gebruikt u een cmdlet voor een geplande taak, zoals Get-ScheduledJob
.
Gebruik de cmdlet om een lijst met alle exemplaren van een geplande taak op te Get-Job
halen.
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 geeft de eigenschappen Name, ID en PSBeginTime weer van een exemplaar van een geplande taak 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 cmdlet om de resultaten van een exemplaar van een geplande taak op te Receive-Job
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 de uitvoeringsgeschiedenisbestanden voor de taak op schijf doorzoeken.
De uitvoeringsgeschiedenis bevat een record van alle geactiveerde taakexemplaren.
Controleer of er een map met tijdstempels in de map voor een geplande taak in het volgende pad staat:
$home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob <ScheduledJobName>\Output
Bijvoorbeeld:
C:\Users<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob <ScheduledJobName>\Output
De cmdlet haalt bijvoorbeeld Get-ChildItem
de uitvoeringsgeschiedenis op van de geplande ProcessJob-taak op schijf.
$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 map met tijdstempels vertegenwoordigt een taakexemplaren. De resultaten van elk taakexemplaren worden opgeslagen in een Results.xml-bestand in de map met tijdstempels.
Met de volgende opdracht worden bijvoorbeeld de Results.xml bestanden voor elk opgeslagen exemplaar van de geplande ProcessJob-taak . 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 is geïmporteerd.
Notitie
Voordat u een taak-cmdlet op geplande taakexemplaren gebruikt, controleert u of de module PSScheduledJob is opgenomen in de sessie. Zonder de module PSScheduledJob kunnen de taak-cmdlets geen geplande taakexemplaren of hun resultaten ophalen.
De PSScheduledJob-module importeren:
Import-Module PSScheduledJob
Receive-Job cmdlet heeft de resultaten mogelijk al geretourneerd
Als Receive-Job
er geen resultaten van het taakexemplaren worden geretourneerd, kan dit zijn omdat er in de huidige sessie een Receive-Job
opdracht is uitgevoerd voor dat taakexemplaren zonder de parameter Keep .
Wanneer u Receive-Job
zonder de parameter Keep gebruikt, Receive-Job
retourneert 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 instanties 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 module PSScheduledJob 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
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 een geplande taak nog bestaat.
Get-ScheduledJob
Het aantal resultaten heeft mogelijk de ExecutionHistoryLength overschreden
De eigenschap ExecutionHistoryLength van een geplande taak bepaalt hoeveel taakexemplaren en de bijbehorende resultaten op schijf worden opgeslagen. 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 nieuw 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 taak ProcessJob .
(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
cmdlets en Set-ScheduledJob
.
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
De parameter ClearExecutionHistory van de Set-ScheduledJob
cmdlet verwijdert de uitvoeringsgeschiedenis van een taak. U kunt deze functie gebruiken om schijfruimte vrij te maken of resultaten te verwijderen die niet nodig zijn, of die al worden 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 verwijdert u de uitvoeringsgeschiedenis van de geplande ProcessJob-taak .
Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
Remove-Job
De cmdlet verwijdert ook taakresultaten. Wanneer u gebruikt Remove-Job
om een geplande taak te verwijderen, 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 gebruikt Start-Job
om een geplande taak te starten, wordt in plaats van een taaktrigger Start-Job
een standaardachtergrondtaak gestart. De achtergrondtaak en de resultaten ervan worden niet opgeslagen in de uitvoeringsgeschiedenis van de taak op schijf.
U kunt de Get-Job
cmdlet gebruiken om de taak op te halen en de Receive-Job
cmdlet 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.
Bovendien 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 de sessie of Sluit PowerShell, worden het taakexemplaren en de bijbehorende resultaten verwijderd.
Geplande taak wordt niet uitgevoerd
Geplande taken worden niet automatisch uitgevoerd als de taaktriggers of de geplande taak zijn 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 True 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 True 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 voorkomt, zoals de 5e maandag van de maand.
Geplande taken worden niet automatisch uitgevoerd als niet aan de voorwaarden van de taaktrigger of 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 deze tevreden zijn. Een geplande taak die vereist dat de computer inactief is of een netwerkverbinding vereist, of die een lange IdleDuration of een korte IdleTimeout heeft, kan bijvoorbeeld nooit worden uitgevoerd.
Gebruik de Get-ScheduledJobOption
cmdlet om de taakopties en de bijbehorende waarden te onderzoeken.
Get-ScheduledJob -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 exemplaar van de geplande taak is mogelijk mislukt
Als een opdracht voor een geplande taak mislukt, meldt 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 taakfouten 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:
Get-WinEvent -LogName Microsoft-Windows-TaskScheduler/Operational |
Where {$_.Message -like "fail"}
Controleer de taakrecord in Taakplanner. Geplande PowerShell-taken worden opgeslagen in de volgende map Geplande taak:
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
opdracht of Set-ScheduledJob
.
Als die gebruiker niet gemachtigd is om de opdrachten of scripts uit te voeren, mislukt de taak.
Kan de geplande taak niet ophalen of de geplande taak 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 is beschadigd, 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 over 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>
Bijvoorbeeld:
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 geplande taken niet consistent vinden
Wanneer de module PSScheduledJob zich niet in de huidige sessie bevindt, kunnen de taak-cmdlets geen geplande taken ophalen, starten of hun resultaten ophalen.
Als u de module PSScheduledJob wilt importeren, typt Import-Module PSScheduledJob
of voert u een cmdlet in de module uit of haalt u deze op, zoals de Get-ScheduledJob
cmdlet.
Vanaf PowerShell 3.0 worden modules automatisch geïmporteerd wanneer u een cmdlet in de module opkrijgt of gebruikt.
Wanneer de module PSScheduledJob zich niet in de huidige sessie bevindt, is de volgende opdrachtvolgorde 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 module PSScheduledJob importeert en vervolgens de opdracht uitvoert.