about_Scheduled_Jobs_Advanced
適用於: Windows PowerShell 3.0
主題
about_Scheduled_Jobs_Advanced
簡短描述
說明進階排程工作主題,包括構成排程工作基礎的檔案結構。
詳細描述
這個主題包含下列各節:
-- 已排程的工作目錄和檔案
-- 重新命名已排程工作
-- 立即開始已排程工作
-- 管理執行歷程記錄
已排程工作目錄和檔案
Windows PowerShell® 的已排程工作是 Windows PowerShell 工作及工作排程器工作。各項已排程工作都登錄在工作排程器中,並以 Microsoft .Net Framework 序列化 XML 格式儲存在磁碟上。
當您建立已排程工作時,Windows PowerShell 會在本機電腦上的 $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs 目錄中建立已排程工作目錄。目錄名稱與工作名稱相同。
以下為 ScheduledJobs 目錄範例。
PS C:\ps-test> dir $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 子目錄。
PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\ProcessJob
Directory:
C:\Users\User1\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
已排程工作的 Output 目錄包含其執行歷程記錄。每次工作觸發程序開始已排程工作,Windows PowerShell 都會在 Output 目錄中建立以時間戳記為名的目錄。時間戳記目錄包含工作結果 Results.xml 檔案和工作狀態 Status.xml 檔案。
下列命令會顯示 ProcessJob 已排程工作的執行歷程記錄目錄。
PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\ProcessJob\Output
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
PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\ProcessJob\Output\20111102-030002-260
Directory: C:\Users\juneb\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\testjob\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,Windows PowerShell 會刪除已排程工作及其執行歷程記錄,包括工作結果。
立即開始已排程工作
立即開始已排程工作的方法有兩種:
-- 執行 Start-Job Cmdlet 開始任何已排程的工作
-- 將 RunNow 參數新增至 Register-ScheduledJob 命令,命令一執行即開始工作
使用 Start-Job Cmdlet 開始的工作都是標準的 Windows PowerShell 背景工作,不是已排程工作的執行個體。這些工作如同所有的背景工作一樣會立即開始,它們不是工作選項主體,也不受工作觸發程序影響;而且其輸出不會儲存在已排程工作目錄的 Output 目錄。
下列命令使用 Start-Job Cmdlet 的 DefinitionName 參數啟動 ProcessJob 已排程工作。
Start-Job -DefinitionName ProcessJob
若要管理工作並取得工作結果,請使用 Job Cmdlet。如需 Job Cmdlet 的詳細資訊,請參閱 about_Jobs (https://go.microsoft.com/fwlink/?LinkID=113251)。
注意:若要對已排程工作的執行個體使用 Job Cmdlet,工作階段必須匯入 PSScheduledJob 模組。若要匯入 PSScheduledJob 模組,請輸入 "Import-Module PSScheduledJob" (不含引號),或使用任何 Scheduled Job Cmdlet,例如 Get-ScheduledJob。
重新命名已排程工作
若要重新命名已排程的工作,請使用 Set-ScheduledJob Cmdlet 的名稱參數。當您重新命名已排程工作時,Windows PowerShell 會變更已排程工作名稱和已排程工作目錄。但不會變更已經執行的已排程工作執行個體名稱。
取得開始和結束時間
若要取得工作執行個體開始和結束的日期和時間,請使用 Get-Job 傳回之已排程工作的 ScheduledJob 物件的 PSBeginTime 和 PSEndTime 屬性。
下例使用 Format-Table Cmdlet 的 Property 參數,在資料表中顯示每個工作執行個體的 PSBeginTime 和 PSEndTime 屬性。此命令使用計算內容顯示每個工作執行個體的已耗用時間。
PS C:\> 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 屬性的值時,Windows PowerShell 會刪除最舊的執行個體結果,以騰出空間供最新的執行個體結果使用。
Windows PowerShell 預設為每個已排程工作儲存 32 個執行個體的執行歷程記錄和結果。若要變更該值,請使用 Register-ScheduledJob 或 Set-ScheduledJob Cmdlet 的 MaxResultCount 參數。
若要刪除已排程工作的執行歷程記錄和所有結果,請使用 Set-ScheduledJob Cmdlet 的 ClearExecutionHistory 參數。刪除這份執行歷程記錄不能阻止 Windows PowerShell 儲存已排程工作的新執行個體結果。請在此處插入區段主體。
下列命令使用 Register-ScheduledJob Cmdlet 建立已排程的工作。命令使用 MaxResultCount 參數和值 12,只儲存已排程工作 12 個最新的工作執行個體結果。
Register-ScheduledJob -Name ProcessJob -ScriptBlock {Get-Process} -MaxResultCount 12
下列命令使用 Set-ScheduledJob Cmdlet 的 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
另請參閱
about_Scheduled_Jobs
about_Scheduled_Jobs_Troubleshooting
about_Jobs