關於排程工作基本概念
簡短描述
說明如何建立及管理排程工作。
完整描述
本文件說明如何執行建立和管理排程工作的基本工作。 如需更多進階工作的詳細資訊,請參閱 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。 使用 Name、 ID 和 InputObject 參數來指定排程的工作,而不是工作觸發程式。
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。 使用 Name、 ID 和 InputObject 參數來指定排程的工作,而不是作業選項。
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 scheduledJob 的 WakeToRun 選項值變更為 True。
Set
PSScheduledJob 模組中的 Cmdlet,例如 Set-ScheduledJobOption
Cmdlet,沒有 Name 或 ID 參數。 您可以使用 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-Job
和 Stop-Job
Receive-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 視窗。