Windows计划任务

**任務計劃程式**（英語：**Task Scheduler**），也稱**工作排程器**。這是 Microsoft Windows 中的一個組件，可以預先計劃在特定時間或指定時間後啟動程式或指令碼。它在 Windows 95 的 Microsoft Plus! 中以「系統代理」（System Agent）首次引入，隨後在 Windows 98 中被更名為任務計劃程式。任務計劃程式啟動前，Windows 事件記錄服務必須已在執行。

此服務不應與電腦排程混淆，因其為分配 CPU 資源到記憶體中的處理程序。

## 版本

### 任務計劃 1.0

任務計劃程式 1.0 搭載於 Windows 2000、Windows XP 和 Windows Server 2003。它執行為一個 Windows 服務，任務定義和計劃儲存於二進位的 `.job` 檔案，操作各任務就是直接操作各 `.job` 檔案，每個任務對應一個操作。在 Windows 95、Windows 98 和 Windows Me 中，任務計劃程式使用一個普通的 `mstask.exe` 程式執行。在 Windows 95 和 Windows 98 中，它還在通知區域顯示一個狀態圖示；在 Windows Me 中則是執行為一個隱藏服務，但可以顯示一個托盤圖示。在 Windows 2000、Windows XP 和 Windows Server 2003 中，它被實現為一個 Windows 服務，電腦程式和指令碼可以通過六個 COM 介面存取此服務。微軟還提供了一個計劃助手 DLL、一個例子 VBScript 和一個自動任務計劃程式的設定檔。

任務計劃程式除了控制台中的圖形化使用者介面，Windows 還提供兩個命令列工具來管理工作排程器：`at.exe`（已棄用）和 `schtasks.exe`。但是，`at.exe` 不能存取用控制台或 `schtasks.exe` 建立或修改的任務。另外，使用 `at.exe` 建立的任務預設非互動；互動任務需要被顯式請求。

### 任務計劃 2.0

任務計劃程式 2.0 在 Windows Vista、Windows Server 2008 及之後版本中存在。重新設計的「任務計劃程式」使用者介面基於微軟管理控制台。除了在指定的時間或時間間隔後執行任務，任務計劃程式 2.0 還支援行事曆和基於事件的觸發器，比如在特定紀錄檔被記錄到事件紀錄檔時啟動一個任務，或者在發生一系列事件時啟動任務。另外，同一個事件觸發的多個任務可以組態為同時或者按預先組態的順序以鏈式執行一系列動作，而無須建立多個工作排程器。任務也可組態為基於系統狀態執行，諸如閒置指定時間、啟動時、登出時，或者只是特定周期或指定時間。對 Windows 事件紀錄檔還可以使用 XPath 表達式過濾。任務也可在指定事件發生後延遲指定時間再執行，或者不斷重複直至其他某些事件發生。任務還可組態執行失敗時執行的操作。操作可以回應觸發器，既基於事件又基於時間，不僅包含啟動應用程式，還執行一系列自訂操作。任務計劃程式已包含大量為眾多應用程式準備的內建操作，包括傳送電子郵件、顯示訊息方塊、觸發一個 COM 控制代碼等。使用任務計劃程式 API 還可指定自訂操作。任務計劃程式會在歷史紀錄檔保留所有任務的所有執行詳細資訊。Windows Vista 使用任務計劃程式 2.0 執行各種系統級任務；因此，任務計劃程式服務不再允許被禁用（除非直接修改登錄檔）。

任務計劃程式 2.0 提供了一個 API 以允許電腦程式和指令碼建立任務。它採用 42 個 COM 介面組成。任務計劃程式 2.0 的任務檔案基於 XML 並且人類可讀，遵循「任務計劃程式方案架構」。雖然可以做到，但微軟不建議手動建立任務檔案，而應該使用任務計劃程式 API。

#### 其他功能

* 新的安全功能，包括使用「憑據管理器」為工作群組電腦的任務提供密碼，使用 Active Directory 為加入域的電腦的任務提供憑據，以防止這些資訊被輕易檢索。另外，工作排程器會在其自身的對談執行，而不是使用當前使用者的系統服務對談。
* 可以喚醒遠端電腦，或使用 BIOS 計時器將機器從睡眠或休眠中喚醒，以執行工作排程器或執行剛錯過的工作排程器。
* 可以將任務直接附加到事件檢視器中的事件。

## 任務

任務計劃程式按各項受管理的任務運作。任務會在特定條件下以執行操作回應。定義一個任務可以關聯一系列操作，其中可以包括啟動應用程式或採取其他自訂操作，to a set of triggers, which can either 基於時間或基於事件。此外，一個任務也可以包含定義如何執行操作的元資料，例如任務將在哪個安全上下文執行。任務被序列化為 `.job` 檔案並儲存在名為「任務資料夾」的特殊資料夾中。在編程角度，任務資料夾可以使用 `ITaskFolder` 介面或 `TaskFolder` 指令碼物件存取，單個任務可以使用 `IRegisteredTask` 介面或 `RegisteredTask` 物件存取。

## 軟體缺陷

在 Windows 2000 和 Windows XP 中，當電腦準備使用 `sysprep` 進行磁碟映像時，分配給以系統權限執行的任務不起作用。Sysprep 會更改安全識別碼（SID）以避免重複，但不會更新工作排程器為使用新的 SID。因此，所有 SYSTEM 的工作排程器在映像的電腦上都會執行失敗。沒有適用於此問題的解決方案，但重新計劃該任務可以暫時緩解問題。

在 Windows Vista 和 Windows Server 2008 上，如果未安裝 Service Pack 2，任務計劃程式中的「下次執行時間」可能顯示錯誤。

當使用者在 Windows Vista、7、2008 以及 2008 R2 作業系統上的「微軟管理控制台」執行「任務計劃程式 2.0」版本時會提示使用者當前正在執行「任務計劃程式 1.0」的通知。雖然只是一個不足為慮的小瑕疵，很可能是軟體開發人員在重寫該組件時忘記修復此 Bug。但在後續的 Windows 8 和 Windows Severe 2012 作業系統中已得到糾正。

## 參見

* 計劃工作任務
* cron
* VisualCron
* Windows 工作管理員

## 參考資料

## 外部連結

* Task Scheduler （頁面存檔備份，存於網際網路檔案館） on MSDN
* The Log File in the Task Scheduler May Be Incorrectly Formatted and Difficult to Read （頁面存檔備份，存於網際網路檔案館）
* Unable to Delete Text in the Task Scheduler Log File （頁面存檔備份，存於網際網路檔案館）
* Task Scheduler Service Does Not Start （頁面存檔備份，存於網際網路檔案館）
* Scheduled Program Does Not Start in Task Scheduler （頁面存檔備份，存於網際網路檔案館）
* Cannot Disable Task Scheduler （頁面存檔備份，存於網際網路檔案館）
* Scheduled Tasks for Active Directory Management （頁面存檔備份，存於網際網路檔案館）
* Task Scheduler Managed Wrapper （頁面存檔備份，存於網際網路檔案館）