共用方式為


關於排程工作

簡短描述

描述排程的工作,並說明如何在PowerShell和工作排程器中使用和管理排程工作。

完整描述

PowerShell 排程工作是 PowerShell 背景工作和工作排程器工作的實用混合式。

如同 PowerShell 背景工作,排程工作會在背景以異步方式執行。 您可以使用作業 Cmdlet 來管理已排程工作的實體,例如 Start-JobGet-JobStop-JobReceive-Job

如同工作排程器工作,排程工作會儲存至磁碟。 您可以在 [工作排程器] 中檢視及管理作業、視需要啟用及停用作業、執行或將它們當做範本使用、建立啟動作業的一次性或週期性排程,或設定工作啟動的條件。

此外,排程工作實例的結果會以容易存取的格式儲存到磁碟,並提供執行中的作業輸出記錄。 排程工作隨附一組自定義的 Cmdlet 來管理它們。 Cmdlet 可讓您建立、編輯、管理、停用和重新啟用排程工作、作業觸發程式和作業選項。

這個全方位且彈性的工具集讓排程工作成為許多專業 PowerShell IT 解決方案的重要元件。

排程的工作 Cmdlet 包含在隨 PowerShell 安裝的 PSScheduledJob 模組中。 此課程模組是在 PowerShell 3.0 中引進,適用於 PowerShell 3.0 和更新版本的 PowerShell。 如需 PSScheduledJob 模組中包含的 Cmdlet 詳細資訊。

如需PowerShell背景工作的詳細資訊,請參閱 about_Jobs

如需工作排程器的詳細資訊,請參閱 工作排程器

注意

您可以在工作排程器中檢視和管理 PowerShell 排程工作。 PowerShell 作業和排程工作 Cmdlet 僅適用於在 PowerShell 中建立的排程工作。

快速入門

此範例會建立排程工作,該工作會在每天上午 3:00 開始,並執行 Get-Process Cmdlet。 即使計算機在電池上執行,工作仍會啟動。

$trigger = New-JobTrigger -Daily -At 3AM
$options = New-ScheduledJobOption -StartIfOnBattery
Register-ScheduledJob -Name ProcessJob -ScriptBlock {Get-Process} `
-Trigger $trigger -ScheduledJobOption $options

Cmdlet Get-ScheduledJob 會取得本機電腦上的排程工作。

Get-ScheduledJob
Id         Name            Triggers        Command            Enabled
--         ----            --------        -------            -------
7          ProcessJob      {1}             Get-Process        True

Get-JobTrigger 會取得 ProcessJob 的作業觸發程式。 輸入參數會指定排程工作,而不是觸發程式,因為觸發程式會儲存在排程的工作中。

Get-JobTrigger -Name ProcessJob
Id         Frequency       Time                   DaysOfWeek        Enabled
--         ---------       ----                   ----------        -------
1          Daily           11/5/2011 3:00:00 AM                     True

此範例使用 Cmdlet 的 Set-ScheduledJobContinueIfGoingOnBattery 參數,將 ProcessJobStopIfGoingOnBatteries 屬性變更為 False

Get-ScheduledJob -Name ProcessJob | Set-ScheduledJobOption `
-ContinueIfGoingOnBattery -Passthru
StartIfOnBatteries     : True
StopIfGoingOnBatteries : False
WakeToRun              : True
StartIfNotIdle         : True
StopIfGoingOffIdle     : False
RestartOnIdleResume    : False
IdleDuration           : 00:10:00
IdleTimeout            : 01:00:00
ShowInTaskScheduler    : True
RunElevated            : False
RunWithoutNetwork      : True
DoNotAllowDemandStart  : False
MultipleInstancePolicy : IgnoreNew
JobDefinition          : Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition

Cmdlet Get-ScheduledJob 會取得 ProcessJob 排程工作。

Get-ScheduledJob ProcessJob
Id         Name            Triggers        Command        Enabled
--         ----            --------        -------        -------
7          ProcessJob      {1}             Get-Process    True

Cmdlet Get-Job 會取得到目前為止已執行 之 ProcessJob 排程工作的所有實例。 Get-Job只有當 PSScheduledJob 模組匯入目前的會話時,Cmdlet 才會取得排程的工作。

提示

請注意,您會使用排程工作 Cmdlet 來管理排程的工作,但您會使用作業 Cmdlet 來管理排程工作的實例。

Get-Job -Name ProcessJob
Id     Name        PSJobTypeName  State    HasMoreData   Location   Command
--     ----        ------------   -----    -----------   --------   -------
45     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
46     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
47     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
48     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
49     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
50     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
51     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process

Cmdlet Receive-Job 會取得 ProcessJob 排程工作的最新實例結果, (標識元 = 51) 。

Receive-Job -ID 51

即使 Receive-Job 命令未包含 Keep 參數,工作的結果仍會儲存在磁碟上,直到您刪除它們或超過結果數目上限為止。

此工作階段中已不再提供作業結果,但如果您啟動新的工作階段或開啟新的 PowerShell 視窗,則會再次提供作業的結果。

下列命令會使用 Cmdlet 的 Start-JobDefinitionName 參數來啟動 ProcessJob 排程工作。

使用 Start-Job Cmdlet 啟動的作業是標準 PowerShell 背景工作,而不是排程工作的實例。 就像所有背景工作一樣,這些作業會立即啟動,它們不會受限於作業選項或受作業觸發程序影響,而且其輸出不會儲存在排程工作目錄的輸出目錄中。

Start-Job -DefinitionName ProcessJob

Cmdlet 會 Unregister-ScheduledJob 刪除 ProcessJob 排程工作及其工作實例的所有已儲存結果。

Unregister-ScheduledJob ProcessJob

排程工作概念

排程的工作會執行命令或腳本。 排程工作可以包含啟動作業的作業觸發程式,以及設定執行作業之條件的作業選項。

作業觸發程式會自動啟動排程的工作。 作業觸發程式可以包含一次性或週期性排程或指定事件,例如使用者登入或 Windows 啟動時。 排程工作可以有一或多個作業觸發程式,而且您可以建立、新增、啟用、停用和取得作業觸發程式。

工作觸發程序是選擇性的。 您可以使用 ,或將 RunNow 參數新增至Register-ScheduledJob命令,立即Start-Job cmdlet啟動排程的工作。

作業選項會設定執行排程工作的條件。 每個排程工作都有一個作業選項物件。 您可以建立和編輯作業選項物件,並將其新增至一或多個排程工作。

每次排程的工作啟動時,都會建立作業實例。 使用 PowerShell 作業 Cmdlet 來檢視和管理作業實例。

排程工作會儲存到磁碟,並使用 Cmdlet 動詞, Register而不是 New。 XML 檔案位於 目錄 $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs的本機計算機上。

PowerShell 會為每個排程的工作建立目錄,並將作業命令、作業觸發程式、作業選項和作業結果儲存在排程的工作目錄中。 作業觸發程式和作業選項不會獨立儲存至磁碟。 它們會儲存在與其相關聯之每個排程工作的排程工作 XML 中。

排程的工作、作業觸發程式和作業選項會顯示在PowerShell中做為物件。 物件會相互連結,讓這些物件易於探索及使用於命令和腳本中。

排程的工作會顯示為 ScheduledJobDefinition 物件。 ScheduledJobDefinition 物件具有 JobTriggers 屬性,其中包含排程工作的工作觸發程式和包含作業選項的 Options 屬性。 分別代表作業觸發程式和作業選項的 ScheduledJobTriggersScheduledJobOptions 物件,每個物件都有 一個 JobDefinition 屬性,其中包含與其相關聯的排程工作。 這個遞歸相互連線可讓您輕鬆地尋找排程工作的觸發程式和選項,以及尋找、編寫腳本,以及顯示與任何作業觸發程式或作業選項相關聯的排程工作。

另請參閱

about_Scheduled_Jobs_Basics

about_Scheduled_Jobs_Advanced

about_Scheduled_Jobs_Troubleshooting

工作排程器