Over geplande taken geavanceerd
Korte beschrijving
Hierin worden geavanceerde onderwerpen over geplande taken uitgelegd, inclusief de bestandsstructuur die ten grondslag staat aan geplande taken.
Lange beschrijving
Mappen en bestanden voor geplande taken
Geplande PowerShell-taken zijn zowel PowerShell-taken als Taakplanner-taken. Elke geplande taak wordt geregistreerd in Task Scheduler en opgeslagen op schijf in microsoft .NET Framework serialisatie-XML-indeling.
Wanneer u een geplande taak maakt, maakt PowerShell een map voor de geplande taak in de $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
map op de lokale computer. De mapnaam is hetzelfde als de taaknaam.
Hier volgt een voorbeeld van de map ScheduledJobs .
Get-ChildItem $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
Directory: C:\Users\User01\AppData\Local
\Microsoft\Windows\PowerShell\ScheduledJobs
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 9/29/2011 10:03 AM ArchiveProjects
d---- 9/30/2011 1:18 PM Inventory
d---- 10/20/2011 9:15 AM Backup-Scripts
d---- 11/7/2011 10:40 AM ProcessJob
d---- 11/2/2011 10:25 AM SecureJob
d---- 9/27/2011 1:29 PM Test-HelpFiles
d---- 9/26/2011 4:22 PM DeployPackage
Elke geplande taak heeft een eigen map. De map bevat het XML-bestand van de geplande taak en een submap Uitvoer .
$Path = "$home\AppData\Local\Microsoft\Windows\PowerShell"
$Path += "\ScheduledJobs\ProcessJob"
Get-ChildItem $Path
Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell
\ScheduledJobs\ProcessJob
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 11/1/2011 3:00 PM Output
-a--- 11/1/2011 3:43 PM 7281 ScheduledJobDefinition.xml
De uitvoermap voor een geplande taak bevat de uitvoeringsgeschiedenis. Telkens wanneer een taaktrigger een geplande taak start, maakt PowerShell een map met de naam timestamp in de uitvoermap. De map timestamp bevat de resultaten van de taak in een Results.xml-bestand en de taakstatus in een Status.xml-bestand .
De volgende opdracht toont de uitvoeringsgeschiedenismappen voor de geplande taak ProcessJob .
$Path = "$home\AppData\Local\Microsoft"
$Path += "\Windows\PowerShell\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
$Path = "$home\AppData\Local\Microsoft\Windows\PowerShell\"
$Path += "ScheduledJobs\ProcessJob\Output\20111102-030002-260"
Get-ChildItem $Path
Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell
\ScheduledJobs\ProcessJob\Output\20111102-030002-260
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 11/2/2011 3:00 AM 581106 Results.xml
-a--- 11/2/2011 3:00 AM 9451 Status.xml
U kunt de ScheduledJobDefinition.xml, Results.xml en Status.xml bestanden openen en onderzoeken of de Select-XML
cmdlet gebruiken om de bestanden te parseren.
Waarschuwing
Bewerk de XML-bestanden niet. Als een XML-bestand ongeldige XML bevat, verwijdert PowerShell de geplande taak en de uitvoeringsgeschiedenis, inclusief taakresultaten.
Een geplande taak onmiddellijk starten
U kunt een geplande taak op twee manieren direct starten:
- Voer de
Start-Job
cmdlet uit om een geplande taak te starten. - Voeg de parameter RunNow toe aan uw
Register-ScheduledJob
opdracht om de taak te starten zodra de opdracht wordt uitgevoerd.
Taken die zijn gestart met behulp van de Start-Job
cmdlet, zijn standaard PowerShell-achtergrondtaken, geen exemplaren van de geplande taak. Net als alle achtergrondtaken worden deze taken onmiddellijk gestart, ze zijn niet onderhevig aan taakopties of worden beïnvloed door taaktriggers. De taakuitvoer wordt niet opgeslagen in de map Uitvoer van de geplande taakmap.
Met de volgende opdracht wordt de parameter DefinitionName van de Start-Job
cmdlet gebruikt om de geplande ProcessJob-taak te starten.
Start-Job -DefinitionName ProcessJob
Gebruik de taak-cmdlets om de taak te beheren en de taakresultaten op te halen. Zie about_Jobs voor meer informatie over de taak-cmdlets.
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
.
De naam van een geplande taak wijzigen
Als u de naam van een geplande taak wilt wijzigen, gebruikt u de parameter Name van de Set-ScheduledJob
cmdlet. Wanneer u de naam van een geplande taak wijzigt, wijzigt PowerShell de naam van de geplande taak en de map met geplande taken. De namen van exemplaren van de geplande taak die al zijn uitgevoerd, worden echter niet gewijzigd.
Begin- en eindtijden ophalen
Als u de datums en tijden wilt ophalen waarop taakexemplaren zijn gestart en beëindigd, gebruikt u de eigenschappen PSBeginTime en PSEndTime van het object ScheduledJob dat Get-Job
wordt geretourneerd voor geplande taken.
In het volgende voorbeeld wordt de parameter Property van de Format-Table
cmdlet gebruikt om de eigenschappen PSBeginTime en PSEndTime van elk taakexemplaar in een tabel weer te geven. Een berekende eigenschap met de naam Label geeft de verstreken tijd van elk taakexemplaar weer.
Get-job -Name UpdateHelpJob |
Format-Table -Property ID, PSBeginTime, PSEndTime,
@{Label="Elapsed Time";Expression={$.PsEndTime - $.PSBeginTime}}
Id PSBeginTime PSEndTime Elapsed Time
-- ----------- --------- ------------
2 11/3/2011 3:00:01 AM 11/3/2011 3:00:39 AM 00:00:38.0053854
3 11/4/2011 3:00:02 AM 11/4/2011 3:01:01 AM 00:00:59.1188475
4 11/5/2011 3:00:02 AM 11/5/2011 3:00:50 AM 00:00:48.3692034
5 11/6/2011 3:00:01 AM 11/6/2011 3:00:54 AM 00:00:52.8013036
6 11/7/2011 3:00:01 AM 11/7/2011 3:00:38 AM 00:00:37.1930350
7 11/8/2011 3:00:01 AM 11/8/2011 3:00:57 AM 00:00:56.2570556
8 11/9/2011 3:00:03 AM 11/9/2011 3:00:55 AM 00:00:51.8142222
9 11/10/2011 3:00:02 AM 11/10/2011 3:00:42 AM 00:00:40.7195954
Uitvoeringsgeschiedenis beheren
U kunt het aantal resultaten van het taakexemplaar bepalen dat voor elke geplande taak wordt opgeslagen en de uitvoeringsgeschiedenis en opgeslagen taakresultaten van een geplande taak verwijderen.
De eigenschap ExecutionHistoryLength van een geplande taak bepaalt hoeveel resultaten van het taakexemplaar worden opgeslagen voor de geplande taak. Wanneer het aantal opgeslagen resultaten groter is dan de waarde van de eigenschap ExecutionHistoryLength , verwijdert PowerShell de resultaten van het oudste exemplaar om ruimte te maken voor de resultaten van het nieuwste exemplaar.
Standaard slaat PowerShell de uitvoeringsgeschiedenis en resultaten van 32 exemplaren van elke geplande taak op. Als u deze waarde wilt wijzigen, gebruikt u de parameters MaxResultCount van de Register-ScheduledJob
cmdlets of Set-ScheduledJob
.
Als u de uitvoeringsgeschiedenis en alle resultaten voor een geplande taak wilt verwijderen, gebruikt u de parameter ClearExecutionHistory van de Set-ScheduledJob
cmdlet. Het verwijderen van deze uitvoeringsgeschiedenis voorkomt niet dat PowerShell de resultaten van nieuwe exemplaren van de geplande taak opslaat.
In het volgende voorbeeld wordt splatting gebruikt om parameterwaarden te maken $JobParms
die worden doorgegeven aan de Register-ScheduledJob
cmdlet. Zie about_Splatting.md voor meer informatie.
De Register-ScheduledJob
gebruikt @JobParms
om een geplande taak te maken. De opdracht maakt gebruik van de parameter MaxResultCount met een waarde van 12 om alleen de resultaten van het 12 nieuwste taakexemplaar van de geplande taak op te slaan.
$JobParms = @{
Name = "ProcessJob"
ScriptBlock = {Get-Process}
MaxResultCount = "12"
}
Register-ScheduledJob @JobParms
Met de volgende opdracht wordt de parameter MaxResultCount van de Set-ScheduledJob
cmdlet gebruikt om het aantal opgeslagen exemplaarresultaten te verhogen naar 15.
Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 15
Met de volgende opdracht verwijdert u de uitvoeringsgeschiedenis en de huidige opgeslagen resultaten van de geplande ProcessJob-taak .
Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
Met de volgende opdracht worden de waarden van de eigenschappen name en ExecutionHistoryLength van alle geplande taken op de computer opgehaald en weergegeven in een tabel.
Get-ScheduledJob |
Format-Table -Property Name, ExecutionHistoryLength -AutoSize