共用方式為


關於排程工作基本概念

簡短描述

說明如何建立及管理排程工作。

完整描述

本文件說明如何執行建立和管理排程工作的基本工作。 如需更多進階工作的詳細資訊,請參閱 about_Scheduled_Jobs_Advanced

如何建立排程工作

若要建立排程工作,請使用 Register-ScheduledJob Cmdlet。 此 Cmdlet 需要執行作業的名稱和命令或腳本。 您可以藉由新增 RunNow 參數立即執行作業,或在建立作業時建立作業觸發程式並設定作業選項,或編輯現有的作業。

若要建立執行腳本的作業,請使用 FilePath 參數來指定腳本檔案的路徑。 若要建立執行命令的作業,請使用 ScriptBlock 參數。

Cmdlet 會 Register-ScheduledJob 建立 ProcessJob,以執行 Get-Process 命令。 此排程工作具有預設的作業選項,而且沒有作業觸發程式。

Register-ScheduledJob -Name ProcessJob -ScriptBlock { Get-Process }
Id         Name            Triggers        Command       Enabled
--         ----            --------        -------       -------
8          ProcessJob      {}              Get-Process   True

如何建立作業觸發程式

作業觸發程式會自動啟動排程的工作。 作業觸發程式可以是一次性或週期性排程或事件,例如使用者登入或 Windows 啟動時。 每個作業可以有零個、一個或多個作業觸發程式。

若要建立作業觸發程式,請使用 New-JobTrigger Cmdlet。 下列命令會建立作業觸發程式,此觸發程式會在每個星期一和星期四上午 5:00 啟動作業。 命令會將作業觸發程式儲存在變數中 $T

$T = New-JobTrigger -Weekly -DaysOfWeek "Monday", "Thursday" -At "5:00 AM"

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

如何新增作業觸發程式

當您將作業觸發程式新增至排程工作時,作業觸發程式會新增至排程工作的排程工作 XML 檔案,並成為排程工作的一部分。

您可以在建立排程工作時,將作業觸發程式新增至排程工作,或編輯現有的作業。 您可以隨時變更排程工作的工作觸發程式。

PowerShell 會使用工作排程器所使用的一些相同工作觸發程式。 如需作業觸發程式的詳細資訊,請參閱 New-JobTrigger Cmdlet 的說明主題。

下列範例會使用 splatting 來建立 $JobParms 哪些是傳遞至 Cmdlet 的參數 Register-ScheduledJob 值。 如需詳細資訊,請參閱 about_Splatting.md。 會 Register-ScheduledJob 使用 @JobParms 來建立排程的工作。 它會使用 Trigger 參數來指定變數中的 $T 作業觸發程式。

$JobParms = @{
  Name = "ProcessJob"
  ScriptBlock = {Get-Command}
  Trigger = $T
}

Register-ScheduledJob @JobParms

您也可以隨時將作業觸發程式新增至現有的排程工作。 Cmdlet Add-JobTrigger 會將變數中的 $T 作業觸發程式新增至 ProcessJob 排程工作。

Add-JobTrigger -Name ProcessJob -Trigger $T

因此,作業觸發程式會在每個星期一和星期四上午 5:00 自動啟動 ProcessJob

如何取得作業觸發程式

若要取得排程工作的工作觸發程式,請使用 Get-JobTrigger Cmdlet。 使用 NameIDInputObject 參數來指定排程的工作,而不是工作觸發程式。

Get-JobTrigger 會取得 ProcessJob 的作業觸發程式。

Get-JobTrigger -Name ProcessJob
Id   Frequency       Time                   DaysOfWeek              Enabled
--   ---------       ----                   ----------              -------
1    Weekly          11/7/2011 5:00:00 AM   {Monday, Thursday}      True

如何建立作業選項

作業選項會建立啟動和執行作業的條件。 除非您變更預設作業選項,否則每個作業都有預設的作業選項。 因為作業選項可以防止作業在排程時間執行,所以請務必瞭解作業選項並小心使用。

PowerShell 會使用工作排程器所使用的相同作業選項。 如需作業選項的詳細資訊,請參閱 New-ScheduledJobOption 的說明主題。

作業選項會儲存在排程的工作 XML 檔案中。 您可以在建立排程工作時設定作業選項,或隨時變更它們。

Cmdlet New-ScheduledJobOption 會建立排程工作選項, 其中 WakeToRun 排程工作選項設定為 True。 WakeToRun 選項會執行排程的工作,即使計算機處於排程開始時間的睡眠或休眠狀態也一樣。 命令會將作業選項儲存在變數中 $O

$O = New-ScheduledJobOption -WakeToRun

如何取得作業選項

若要取得排程工作的作業選項,請使用 Get-ScheduledJobOption Cmdlet。 使用 NameIDInputObject 參數來指定排程的工作,而不是作業選項。

Get-ScheduledJobOption 會取得 ProcessJob 的作業選項。

Get-ScheduledJobOption -Name ProcessJob
StartIfOnBatteries     : False
StopIfGoingOnBatteries : True
WakeToRun              : False
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

如何變更作業選項

當您建立排程工作或編輯現有的作業時,您可以變更排程工作的作業選項。

Splatted $JobParms 會傳遞至 Add-JobTrigger Cmdlet 以建立進程作業。 它會使用 ScheduledJobOption 參數來指定變數中的 $O 作業選項。

$JobParms = @{
  Name = "ProcessJob"
  ScriptBlock = {Get-Process}
  ScheduledJobOption = $O
}

Add-JobTrigger @JobParms

您也可以隨時將作業選項變更為現有的排程工作。 下列命令會Set-ScheduledJobOption使用 Cmdlet 將 ProcessJob scheduledJobWakeToRun 選項值變更為 True

SetPSScheduledJob 模組中的 Cmdlet,例如 Set-ScheduledJobOption Cmdlet,沒有 NameID 參數。 您可以使用 InputObject 參數來指定排程的工作選項,或使用管線將排程工作從 Get-ScheduledJobOption Cmdlet 傳送至 Set-ScheduledJobOption

此範例會 Get-ScheduledJob 使用 Cmdlet 來取得 ProcessJob。 它會使用 Get-ScheduledJobOption Cmdlet 來取得 ProcessJobSet-ScheduledJobOption 和 Cmdlet 中的作業選項,將 ProcessJob 中的 WakeToRun 作業選項變更為 True。

Get-ScheduledJob -Name ProcessJob | Get-ScheduledJobOption |
 Set-ScheduledJobOption -WakeToRun

如何取得排程的工作實例

當排程工作啟動時,PowerShell 會建立類似於標準 PowerShell 背景作業的作業實例。 您可以使用作業 Cmdlet,例如 Get-JobStop-JobReceive-Job 來管理作業實例。

注意

若要在排程工作的實例上使用作業 Cmdlet, 必須將 PSScheduledJob 模組匯入會話。 若要匯入 PSScheduledJob 模組,請輸入 Import-Module PSScheduledJob 或使用任何排程的工作 Cmdlet,例如 Get-ScheduledJob

若要取得 PowerShell 排程工作的所有實例,以及所有作用中的標準作業,請使用 Get-Job Cmdlet。 Cmdlet 會 Import-Module 匯入 PSScheduledJob 模組,並 Get-Job 取得本機計算機上的作業。

Import-Module PSScheduledJob
Get-Job

Get-Job 會取得本機電腦上的 ProcessJob 實例。

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 會在 Get-Job 管線下傳送物件。 此 Format-Table Cmdlet 會顯示排程工作 的名稱標識碼BeginTime 屬性。

Get-Job ProcessJob | Format-Table -Property Name, ID, BeginTime
Name       Id BeginTime
----       -- ---------
ProcessJob 43 11/2/2011 3:00:02 AM
ProcessJob 44 11/3/2011 3:00:02 AM
ProcessJob 45 11/4/2011 3:00:02 AM
ProcessJob 46 11/5/2011 3:00:02 AM
ProcessJob 47 11/6/2011 3:00:02 AM
ProcessJob 48 11/7/2011 12:00:01 AM
ProcessJob 49 11/7/2011 3:00:02 AM
ProcessJob 50 11/8/2011 3:00:02 AM

取得排程的工作結果

若要取得排程工作實例的結果,請使用 Receive-Job Cmdlet。

注意

若要在排程工作的實例上使用作業 Cmdlet, 必須將 PSScheduledJob 模組匯入會話。 若要匯入 PSScheduledJob 模組,請輸入 Import-Module PSScheduledJob 或使用任何排程的工作 Cmdlet,例如 Get-ScheduledJob

此範例會取得 ProcessJob 排程工作的最新實例結果, (標識碼 = 51) 。

Import-Module PSScheduledJob
Receive-Job -ID 51 -Keep

排程工作的結果會儲存在磁碟上,因此不需要 Keep 參數 Receive-Job 。 不過,如果沒有 Keep 參數,您只能在每個 PowerShell 工作階段中取得排程工作的結果一次。 若要啟動新的 PowerShell 工作階段,請輸入 PowerShell 或開啟新的 PowerShell 視窗。

另請參閱

about_Scheduled_Jobs_Advanced

about_Scheduled_Jobs_Troubleshooting

about_Scheduled_Jobs

about_Splatting.md

工作排程器