about_Scheduled_Jobs_Advanced
Kurze Beschreibung
Erläutert erweiterte geplante Auftragsthemen, einschließlich der Dateistruktur, die geplanten Aufträgen zugrunde liegt.
Lange Beschreibung
Weitere Informationen zu den Cmdlets, die im PSScheduledJob-Modul enthalten sind, finden Sie unter PSScheduledJob.
Geplante Auftragsverzeichnisse und -dateien
Geplante PowerShell-Aufträge sind sowohl PowerShell-Aufträge als auch Aufgabenplaneraufgaben. Jeder geplante Auftrag wird im Taskplaner registriert und auf dem Datenträger im XML-Format der Serialisierung von Microsoft .NET Framework gespeichert.
Wenn Sie einen geplanten Auftrag erstellen, erstellt PowerShell ein Verzeichnis für den geplanten Auftrag im $HOME\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
Verzeichnis auf dem lokalen Computer. Der Verzeichnisname ist identisch mit dem Auftragsnamen.
Es folgt ein Beispielverzeichnis "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
Jeder geplante Auftrag verfügt über ein eigenes Verzeichnis. Das Verzeichnis enthält die XML-Datei des geplanten Auftrags und ein Ausgabeunterverzeichnis .
$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
Das Ausgabeverzeichnis für einen geplanten Auftrag enthält den Ausführungsverlauf. Jedes Mal, wenn ein Auftragstrigger einen geplanten Auftrag startet, erstellt PowerShell ein Zeitstempel-benanntes Verzeichnis im Ausgabeverzeichnis. Das Zeitstempelverzeichnis enthält die Ergebnisse des Auftrags in einer Results.xml Datei und den Auftragsstatus in einer Status.xml Datei.
Der folgende Befehl zeigt die Ausführungsverlaufsverzeichnisse für den geplanten ProcessJob-Auftrag .
$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
Sie können die ScheduledJobDefinition.xml, Results.xml und Status.xml Dateien öffnen und untersuchen oder das Select-Xml
Cmdlet verwenden, um die Dateien zu analysieren.
Warnung
Bearbeiten Sie die XML-Dateien nicht. Wenn eine XML-Datei ungültiges XML enthält, löscht PowerShell den geplanten Auftrag und den Ausführungsverlauf, einschließlich Auftragsergebnissen.
Sofortiges Starten eines geplanten Auftrags
Sie können einen geplanten Auftrag sofort auf eine von zwei Arten starten:
- Führen Sie das
Start-Job
Cmdlet aus, um einen geplanten Auftrag zu starten. - Fügen Sie den RunNow-Parameter zu Ihrem
Register-ScheduledJob
Befehl hinzu, um den Auftrag zu starten, sobald der Befehl ausgeführt wird.
Aufträge, die mit dem Start-Job
Cmdlet gestartet werden, sind Standard-PowerShell-Hintergrundaufträge, nicht Instanzen des geplanten Auftrags. Wie alle Hintergrundaufträge beginnen diese Aufträge sofort, sie unterliegen nicht den Joboptionen oder sind von Auftragstriggern betroffen. Die Auftragsausgabe wird nicht im Ausgabeverzeichnis des geplanten Auftragsverzeichnisses gespeichert.
Der folgende Befehl verwendet den Parameter DefinitionName des Start-Job
Cmdlets, um den geplanten ProcessJob-Auftrag zu starten.
Start-Job -DefinitionName ProcessJob
Verwenden Sie die Auftrags-Cmdlets, um den Auftrag zu verwalten und die Auftragsergebnisse abzurufen. Weitere Informationen zu den Auftrags-Cmdlets finden Sie unter about_Jobs.
Hinweis
Um die Auftrags-Cmdlets für Instanzen geplanter Aufträge zu verwenden, muss das PSScheduledJob-Modul in die Sitzung importiert werden. Um das PSScheduledJob-Modul zu importieren, geben Oder Import-Module PSScheduledJob
verwenden Sie ein beliebiges geplantes Auftrags-Cmdlet, z Get-ScheduledJob
. B. .
Umbenennen eines geplanten Auftrags
Verwenden Sie den Parameter "Name" des Set-ScheduledJob
Cmdlets, um einen geplanten Auftrag umzubenennen. Wenn Sie einen geplanten Auftrag umbenennen, ändert PowerShell den Namen des geplanten Auftrags und des Verzeichniss für den geplanten Auftrag. Die Namen der Instanzen des geplanten Auftrags, die bereits ausgeführt wurden, werden jedoch nicht geändert.
Start- und Endzeiten abrufen
Verwenden Sie die PSBeginTime- und PSEndTime-Eigenschaften des ScheduledJob-Objekts, das für geplante Aufträge zurückgegeben wird, um die Datums- und Uhrzeitangaben abzurufen, Get-Job
zu denen Auftragsinstanzen gestartet und beendet wurden.
Im folgenden Beispiel wird der Parameter Property des Format-Table
Cmdlets verwendet, um die EIGENSCHAFTEN PSBeginTime und PSEndTime jeder Auftragsinstanz in einer Tabelle anzuzeigen. Eine berechnete Eigenschaft mit dem Namen Label zeigt die verstrichene Zeit jeder Auftragsinstanz an.
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
Verwalten des Ausführungsverlaufs
Sie können die Anzahl der Auftragsinstanzergebnisse ermitteln, die für jeden geplanten Auftrag gespeichert werden, und den Ausführungsverlauf und die gespeicherten Auftragsergebnisse eines geplanten Auftrags löschen.
Die ExecutionHistoryLength-Eigenschaft eines geplanten Auftrags bestimmt, wie viele Auftragsinstanzergebnisse für den geplanten Auftrag gespeichert werden. Wenn die Anzahl der gespeicherten Ergebnisse den Wert der ExecutionHistoryLength-Eigenschaft überschreitet, löscht PowerShell die Ergebnisse der ältesten Instanz, um Platz für die Ergebnisse der neuesten Instanz zu schaffen.
Standardmäßig speichert PowerShell den Ausführungsverlauf und die Ergebnisse von 32 Instanzen jedes geplanten Auftrags. Verwenden Sie zum Ändern dieses Werts die MaxResultCount-Parameter der Register-ScheduledJob
Oder Set-ScheduledJob
Cmdlets.
Um den Ausführungsverlauf und alle Ergebnisse für einen geplanten Auftrag zu löschen, verwenden Sie den ClearExecutionHistory-Parameter des Set-ScheduledJob
Cmdlets. Das Löschen dieses Ausführungsverlaufs verhindert nicht, dass PowerShell die Ergebnisse neuer Instanzen des geplanten Auftrags speichert.
Im folgenden Beispiel wird das Splatting verwendet, um zu erstellen $JobParms
, welche Parameterwerte an das Register-ScheduledJob
Cmdlet übergeben werden. Weitere Informationen finden Sie unter about_Splatting.md.
Die Register-ScheduledJob
Verwendung zum @JobParms
Erstellen eines geplanten Auftrags. Der Befehl verwendet den Parameter "MaxResultCount " mit dem Wert 12, um nur die 12 neuesten Auftragsinstanzergebnisse des geplanten Auftrags zu speichern.
$JobParms = @{
Name = "ProcessJob"
ScriptBlock = {Get-Process}
MaxResultCount = "12"
}
Register-ScheduledJob @JobParms
Der folgende Befehl verwendet den Parameter "MaxResultCount " des Set-ScheduledJob
Cmdlets, um die Anzahl der gespeicherten Instanzenergebnisse auf 15 zu erhöhen.
Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 15
Der folgende Befehl löscht den Ausführungsverlauf und die aktuellen gespeicherten Ergebnisse des geplanten ProcessJob-Auftrags .
Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
Mit dem folgenden Befehl werden die Werte der Eigenschaften "Name" und "ExecutionHistoryLength " aller geplanten Aufträge auf dem Computer abgerufen und in einer Tabelle angezeigt.
Get-ScheduledJob |
Format-Table -Property Name, ExecutionHistoryLength -AutoSize