Om avancerade schemalagda jobb
Kort beskrivning
Förklarar avancerade schemalagda jobbämnen, inklusive filstrukturen som ligger till grund för schemalagda jobb.
Lång beskrivning
Schemalagda jobbkataloger och filer
Schemalagda PowerShell-jobb är både PowerShell-jobb och Schemaläggaraktiviteter. Varje schemalagt jobb registreras i Schemaläggaren och sparas på disk i XML-format för Microsoft .NET Framework serialisering.
När du skapar ett schemalagt jobb skapar PowerShell en katalog för det schemalagda jobbet i $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
katalogen på den lokala datorn. Katalognamnet är samma som jobbnamnet.
Följande är en exempelkatalog för 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
Varje schemalagt jobb har en egen katalog. Katalogen innehåller xml-filen för det schemalagda jobbet och en underkatalog för utdata .
$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
Katalogen Output för ett schemalagt jobb innehåller dess körningshistorik. Varje gång en jobbutlösare startar ett schemalagt jobb skapar PowerShell en tidsstämpel med namnet katalog i utdatakatalogen. Tidsstämpelkatalogen innehåller resultatet av jobbet i en Results.xml-fil och jobbstatusen i en Status.xml fil.
Följande kommando visar körningshistorikkatalogerna för det schemalagda jobbet 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
Du kan öppna och undersöka ScheduledJobDefinition.xml, Results.xml och Status.xml filer eller använda cmdleten Select-XML
för att parsa filerna.
Varning
Redigera inte XML-filerna. Om en XML-fil innehåller ogiltig XML tar PowerShell bort det schemalagda jobbet och dess körningshistorik, inklusive jobbresultat.
Starta ett schemalagt jobb omedelbart
Du kan starta ett schemalagt jobb direkt på något av två sätt:
- Kör cmdleten
Start-Job
för att starta ett schemalagt jobb. - Lägg till RunNow-parametern i
Register-ScheduledJob
kommandot för att starta jobbet så snart kommandot körs.
Jobb som startas med hjälp av cmdleten Start-Job
är vanliga PowerShell-bakgrundsjobb, inte instanser av det schemalagda jobbet. Precis som alla bakgrundsjobb startar de här jobben omedelbart, de omfattas inte av jobbalternativ eller påverkas av jobbutlösare. Jobbutdata sparas inte i katalogen Output i den schemalagda jobbkatalogen.
Följande kommando använder parametern DefinitionName för cmdleten Start-Job
för att starta det schemalagda jobbet ProcessJob.
Start-Job -DefinitionName ProcessJob
Om du vill hantera jobbet och hämta jobbresultatet använder du jobb-cmdletarna. Mer information om jobb-cmdletar finns i about_Jobs.
Anteckning
Om du vill använda jobb-cmdletar på instanser av schemalagda jobb måste modulen PSScheduledJob importeras till sessionen. Om du vill importera PSScheduledJob-modulen skriver Import-Module PSScheduledJob
eller använder du en schemalagd jobb-cmdlet, till exempel Get-ScheduledJob
.
Byt namn på ett schemalagt jobb
Om du vill byta namn på ett schemalagt jobb använder du parametern Namn för cmdleten Set-ScheduledJob
. När du byter namn på ett schemalagt jobb ändrar PowerShell namnet på det schemalagda jobbet och den schemalagda jobbkatalogen. Men det ändrar inte namnen på instanser av det schemalagda jobbet som redan har körts.
Hämta start- och sluttider
Om du vill hämta datum och tider då jobbinstanserna startades och avslutades använder du egenskaperna PSBeginTime och PSEndTime för objektet ScheduledJob som Get-Job
returneras för schemalagda jobb.
I följande exempel används parametern Egenskap för cmdleten Format-Table
för att visa egenskaperna PSBeginTime och PSEndTime för varje jobbinstans i en tabell. En beräknad egenskap med namnet Etikett visar den förflutna tiden för varje jobbinstans.
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
Hantera körningshistorik
Du kan fastställa antalet jobbinstansresultat som sparas för varje schemalagt jobb och ta bort körningshistoriken och sparade jobbresultat för ett schemalagt jobb.
Egenskapen ExecutionHistoryLength för ett schemalagt jobb avgör hur många jobbinstansresultat som sparas för det schemalagda jobbet. När antalet sparade resultat överskrider värdet för egenskapen ExecutionHistoryLength tar PowerShell bort resultatet från den äldsta instansen för att göra plats för resultatet av den senaste instansen.
Som standard sparar PowerShell körningshistoriken och resultatet för 32 instanser av varje schemalagt jobb. Om du vill ändra det värdet använder du parametrarna MaxResultCount för Register-ScheduledJob
cmdletarna eller Set-ScheduledJob
.
Om du vill ta bort körningshistoriken och alla resultat för ett schemalagt jobb använder du parametern ClearExecutionHistory för cmdleten Set-ScheduledJob
. Om du tar bort den här körningshistoriken hindrar du inte PowerShell från att spara resultatet av nya instanser av det schemalagda jobbet.
I följande exempel används splatting för att skapa $JobParms
som är parametervärden som skickas till cmdleten Register-ScheduledJob
. Mer information finns i about_Splatting.md.
Används Register-ScheduledJob
@JobParms
för att skapa ett schemalagt jobb. Kommandot använder parametern MaxResultCount med värdet 12 för att spara endast de 12 senaste jobbinstansresultaten för det schemalagda jobbet.
$JobParms = @{
Name = "ProcessJob"
ScriptBlock = {Get-Process}
MaxResultCount = "12"
}
Register-ScheduledJob @JobParms
Följande kommando använder parametern MaxResultCount för cmdleten Set-ScheduledJob
för att öka antalet sparade instansresultat till 15.
Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 15
Följande kommando tar bort körningshistoriken och de aktuella sparade resultaten av det schemalagda jobbet ProcessJob .
Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
Följande kommando hämtar värdena för egenskaperna name och ExecutionHistoryLength för alla schemalagda jobb på datorn och visar dem i en tabell.
Get-ScheduledJob |
Format-Table -Property Name, ExecutionHistoryLength -AutoSize