共用方式為


about_Scheduled_Jobs

簡短描述

描述排程工作,並說明如何在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 詳細資訊,請參閱 PSScheduledJob

如需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-ScheduledJob ContinueIfGoingOnBattery 參數,將 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 排程工作最近實例的結果(ID = 51)。

Receive-Job -ID 51

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

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

下列命令會使用 Cmdlet 的 Start-Job DefinitionName 參數來啟動 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 屬性,其中包含與其相關聯的排程工作。 這個遞歸互連可讓您輕鬆地尋找排程工作的觸發程式和選項,以及尋找、編寫腳本,以及顯示任何作業觸發程式或作業選項相關聯的排程工作。

另請參閱