Delen via


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.

Zie ook