Delen via


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

Zie ook

about_Scheduled_Jobs_Basics

about_Scheduled_Jobs_Troubleshooting

about_Scheduled_Jobs

about_Splatting.md

Task Scheduler