about_Scheduled_Jobs_Basics
適用於: Windows PowerShell 3.0
主題
about_Scheduled_Jobs_Basics
簡短描述
說明如何建立及管理排程工作。
詳細描述
本主題說明如何執行建立和管理排程工作的基本工作。如需更多進階工作的相關資訊,請參閱 about_Scheduled_Jobs_Advanced。
如何建立排程工作
若要建立排程工作,請使用 Register-ScheduledJob Cmdlet。這個 Cmdlet 需要一個名稱,以及工作所執行的命令或指令碼。您可以新增 RunNow 參數立即執行工作,或者在建立工作時或稍後建立工作觸發程序並設定工作選項。
若要建立執行指令碼的工作,請使用 FilePath 參數指定指令碼檔案的路徑。若要建立執行命令的工作,請使用 ScriptBlock 參數。
下列命令會建立執行 Get-Process 命令的 ProcessJob。這項排程工作有預設工作選項,但沒有工作觸發程序。
PS C:\> 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 檔案,並成為排程工作的一部分。
您可以在建立排程工作時或稍後將工作觸發程序新增至排程工作,而且您可以隨時變更排程工作的工作觸發程序。
Windows PowerShell® 使用工作排程器所使用的其中一些相同工作觸發程序。如需工作觸發程序的詳細資訊,請參閱 New-JobTrigger Cmdlet 的說明主題。在此插入區段主體。
下列命令使用 Register-ScheduledJob Cmdlet 來建立處理序工作。該命令使用 Trigger 參數來指定 $t 變數中的工作觸發程序。
Register-ScheduledJob -Name ProcessJob -ScriptBlock {Get-Command} -Trigger $t
您也可以隨時將工作觸發程序新增至現有的排程工作。下列命令會將 $t 變數中的工作觸發程序新增至 ProcessJob 排程工作。
Add-JobTrigger -Name ProcessJob -Trigger $t
這個命令的結果是,工作觸發程序會於每星期一和星期四上午 5:00 自動啟動 ProcessJob。
如何取得工作觸發程序
若要取得排程工作的工作觸發程序,請使用 Get-JobTrigger Cmdlet。您可以使用 Name、ID 和 InputObject 參數來指定排程工作 (而不是工作觸發程序)。
下列命令會取得 ProcessJob 的工作觸發程序。
PS C:\> Get-JobTrigger -Name ProcessJob
Id Frequency Time DaysOfWeek Enabled
-- --------- ---- ---------- -------
1 Weekly 11/7/2011 5:00:00 AM {Monday, Thursday} True
如何建立工作選項
工作選項可建立啟動和執行該工作的條件。除非您加以變更,否則每項工作都會有預設工作選項。由於工作選項可能會使得工作無法在排程時間執行,因此請務必了解工作選項並謹慎使用。
Windows PowerShell 使用工作排程器所使用的相同工作選項。如需工作選項的詳細資訊,請參閱 New-ScheduledJobOption Cmdlet 的說明主題。請輸入 "Get-Help New-ScheduledJobOption",或參閱 https://go.microsoft.com/fwlink/?LinkID=223915 上的線上說明主題。
工作選項會儲存在排程工作 XML 檔案中。您可以在建立排程工作時設定工作選項,或隨時變更這些選項。
下列命令會建立其 WakeToRun 排程工作選項設定為 True 的排程工作選項。即使電腦在排定的啟動時間處於睡眠或休眠狀態,WakeToRun 選項也會執行排程工作。這個命令會將工作選項儲存在 $o 變數中。
$o = New-ScheduledJobOption -WakeToRun
如何取得工作選項
若要取得排程工作的工作選項,請使用 Get-ScheduledJobOption Cmdlet。您可以使用 Name、ID 和 InputObject 參數來指定排程工作 (而不是工作選項)。
下列命令會取得 ProcessJob 的工作選項。在此插入區段主體。
PS C:\> 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
如何變更工作選項
您可以在建立排程工作時,變更排程工作的工作選項,或於稍後隨時變更。
下列命令使用 Register-JobTrigger Cmdlet 來建立處理序工作。該命令使用 ScheduledJobOption 參數來指定 $o 變數中的工作選項。
Register-JobTrigger -Name ProcessJob -ScriptBlock {Get-Process} -ScheduledJobOption $o
您也可以隨時將工作選項變更為現有的排程工作。下列命令使用 Set-ScheduledJobOption Cmdlet,將 ProcessJob 排程工作的 WakeToRun 選項值變更為 True。
如同 PSScheduledJob 模組中的所有 Set Cmdlet,Set-ScheduledJobOption Cmdlet 沒有 Name 或 ID 參數。您可以使用 InputObject 參數來指定排程工作選項,或將排程工作以管線從 Get-ScheduledJobOption Cmdlet 輸送到 Set-ScheduledJobOption。
下列命令使用 Get-ScheduledJob Cmdlet 來取得 ProcessJob。該命令使用 Get-ScheduledJobOption Cmdlet 來取得 ProcessJob 中的工作選項,並使用 Set-ScheduledJobOption Cmdlet 將 ProcessJob 中的 WakeToRun 工作選項變更為 True。
Get-ScheduledJob -Name ProcessJob | Get-ScheduledJobOption | Set-ScheduledJobOption -WakeToRun
如何取得排程工作執行個體
啟動排程工作之後,Windows PowerShell 會建立類似標準 Windows PowerShell 背景工作的工作執行個體。您可以使用各種 Job Cmdlet (例如 Get-Job、Stop-Job 和 Receive-Job) 來管理工作執行個體。
注意:若要對已排程工作的執行個體使用 Job Cmdlet,工作階段必須匯入 PSScheduledJob 模組。若要匯入 PSScheduledJob 模組,請輸入 "Import-Module PSScheduledJob" (不含引號),或使用任何 Scheduled Job Cmdlet,例如 Get-ScheduledJob。
若要取得 Windows PowerShell 排程工作 (和所有作用中標準工作) 的所有執行個體,請使用 Get-Job Cmdlet。下列命令會匯入 PSScheduledJob 模組,然後取得本機電腦上的所有工作。
PS C:\> Import-Module PSScheduledJob
PS C:\> Get-Job
下列命令會取得本機電腦上的所有 ProcessJob 執行個體。
PS C:\> 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
預設畫面不會顯示通常可區分相同排程工作之不同執行個體的啟動時間。
下列命令使用 Format-Table Cmdlet 來顯示排程工作的 Name、ID 和 BeginTime 屬性。
PS C:\> 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。
注意:若要在排程工作的執行個體上使用 Job Cmdlet,您必須將 PSScheduledJob 模組匯入工作階段。若要匯入 PSScheduledJob 模組,請輸入 "Import-Module PSScheduledJob" (不含引號),或使用任何 Scheduled Job Cmdlet,例如 Get-ScheduledJob。
下列命令會取得 ProcessJob 排程工作 (識別碼 = 51) 之最新執行個體的結果
PS C:\> Import-Module PSScheduledJob
PS C:\> Receive-Job -ID 51 -Keep
排程工作的結果會儲存在磁碟上,因此不需要使用 Receive-Job 的 Keep 參數。不過,在不使用 Keep 參數的情況下,每個 Windows PowerShell 工作階段一次只能取得一個排程工作的結果。若要啟動新的 Windows PowerShell 工作階段,請輸入 "PowerShell" 或開啟新的 Windows PowerShell 視窗。
另請參閱
about_Scheduled_Jobs
about_Scheduled_Jobs_Advanced
about_Scheduled_Jobs_Troubleshooting