關於排程工作進階
簡短描述
說明進階排程工作主題,包括構成排程工作基礎的檔案結構。
完整描述
排程的工作目錄和檔案
PowerShell 排程工作同時是 PowerShell 作業和工作排程器工作。 每個排程工作都會在工作排程器中註冊,並以 Microsoft .NET Framework 串行化 XML 格式儲存在磁碟上。
當您建立排程工作時,PowerShell 會在本機電腦上的 目錄中建立排程工作的 $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs
目錄。 目錄名稱與作業名稱相同。
以下是 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
每個排程工作都有自己的目錄。 目錄包含排程的工作 XML 檔案和 Output 子目錄。
$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
排程工作的 [輸出 ] 目錄包含其執行歷程記錄。 每次作業觸發程序啟動排程工作時,PowerShell 都會在輸出目錄中建立時間戳命名目錄。 timestamp 目錄包含 Results.xml 檔案中作業的結果,以及 Status.xml 檔案中的作業狀態。
下列命令顯示 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
您可以開啟並檢查 ScheduledJobDefinition.xml、 Results.xml 和 Status.xml 檔案,或使用 Select-XML
Cmdlet 剖析檔案。
警告
請勿編輯 XML 檔案。 如果有任何 XML 檔案包含無效的 XML,PowerShell 會刪除排程的工作及其執行歷程記錄,包括作業結果。
立即啟動排程工作
您可以透過下列兩種方式之一立即啟動排程工作:
- 執行
Start-Job
Cmdlet 以啟動任何排程的工作。 - 將 RunNow 參數新增至命令
Register-ScheduledJob
,以在執行命令時立即啟動作業。
使用 Start-Job
Cmdlet 啟動的作業是標準 PowerShell 背景工作,而不是排程工作的實例。 就像所有背景工作一樣,這些作業會立即啟動,它們不會受限於作業選項或受作業觸發程序影響。 作業輸出不會儲存在排程工作目錄的 [輸出 ] 目錄中。
下列命令會使用 Cmdlet 的 Start-Job
DefinitionName 參數來啟動 ProcessJob 排程工作。
Start-Job -DefinitionName ProcessJob
若要管理作業並取得作業結果,請使用作業 Cmdlet。 如需作業 Cmdlet 的詳細資訊,請參閱 about_Jobs。
注意
若要在排程工作的實例上使用作業 Cmdlet, 必須將 PSScheduledJob 模組匯入會話。 若要匯入 PSScheduledJob 模組,請輸入 Import-Module PSScheduledJob
或使用任何排程的工作 Cmdlet,例如 Get-ScheduledJob
。
重新命名排程工作
若要重新命名排程工作,請使用 Cmdlet 的 Set-ScheduledJob
Name 參數。 當您重新命名排程工作時,PowerShell 會變更排程工作的名稱和排程的工作目錄。 不過,它不會變更已執行之排程工作實例的名稱。
開始使用和結束時間
若要取得作業實例啟動和結束的日期和時間,請使用針對排程工作傳回之 ScheduledJob 物件的 Get-Job
PSBeginTime 和 PSEndTime 屬性。
下列範例會使用 Cmdlet 的 Format-Table
Property 參數來顯示數據表中每個作業實例的 PSBeginTime 和 PSEndTime 屬性。 名為 Label 的匯出屬性會顯示每個作業實例經過的時間。
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
管理執行歷程記錄
您可以決定針對每個排程工作儲存的作業實例結果數目,並刪除任何排程工作的執行歷程記錄和已儲存的作業結果。
排程工作的 ExecutionHistoryLength 屬性會決定排程工作儲存多少個工作實例結果。 當儲存的結果數目超過 ExecutionHistoryLength 屬性的值時,PowerShell會刪除最舊實例的結果,以空間容納最新實例的結果。
根據預設,PowerShell 會儲存每個排程工作 32 個實例的執行歷程記錄和結果。 若要變更該值,請使用 或 Set-ScheduledJob
Cmdlet 的 Register-ScheduledJob
MaxResultCount 參數。
若要刪除排程工作的執行歷程記錄和所有結果,請使用 Cmdlet 的 Set-ScheduledJob
ClearExecutionHistory 參數。 刪除此執行歷程記錄不會防止PowerShell儲存排程工作之新實例的結果。
下列範例會使用 splatting 來建立 $JobParms
哪些是傳遞至 Cmdlet 的參數 Register-ScheduledJob
值。 如需詳細資訊,請參閱 about_Splatting.md。
會 Register-ScheduledJob
使用 @JobParms
來建立排程的工作。 此命令會使用 MaxResultCount 參數的值為12,只儲存排程工作的12個最新工作實例結果。
$JobParms = @{
Name = "ProcessJob"
ScriptBlock = {Get-Process}
MaxResultCount = "12"
}
Register-ScheduledJob @JobParms
下列命令會使用 Cmdlet 的 Set-ScheduledJob
MaxResultCount 參數,將儲存的實例結果數目增加到 15。
Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 15
下列命令會刪除 ProcessJob 排程作業的執行歷程記錄和目前儲存的結果。
Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
下列命令會取得計算機上所有排程工作的名稱和 ExecutionHistoryLength 屬性值,並將其顯示在數據表中。
Get-ScheduledJob |
Format-Table -Property Name, ExecutionHistoryLength -AutoSize