共用方式為


about_Scheduled_Jobs_Advanced

簡短描述

說明進階排程工作主題,包括排程工作不足的檔案結構。

詳細描述

如需 PSScheduledJob 模組中包含的 Cmdlet 詳細資訊,請參閱 PSScheduledJob

排程的工作目錄和檔案

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 都會在輸出目錄中建立時間戳命名的目錄。 時間戳目錄包含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.xmlResults.xmlStatus.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 傳遞至 Register-ScheduledJob Cmdlet 的參數值。 如需詳細資訊,請參閱 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

下列命令會取得計算機上所有排程工作之 name 和 ExecutionHistoryLength 屬性的值,並將其顯示在數據表中。

Get-ScheduledJob |
  Format-Table -Property Name, ExecutionHistoryLength -AutoSize

另請參閱