Windows Task Scheduler

0. 前言


多少次我們希望睡覺的時候電腦能幫我們處理工作?其實這在 Windows 之中其實是有內建功能的,用來幫助處理自動程序。透過 Task Scheduler 這項工具,我們可以設定各種條件,讓開機的電腦自動執行指定任務。在我們開始編寫腳本之前,先來感受自動化的實用與強大吧!

1. 重點


透過排程能夠幫助我們預定或者重複定時計畫。
許多程序都利用此工具檢查更新,建議建立新的群組避免人為失誤。

2. 內容


2.1. 介面啟動

啟動方式

介面化 透過開始列表搜尋 Task Scheduler

指令化 按壓 Win + R 執行 taskschd.msc

介面檢視

啟動完成後應該會看到如此的介面,仔細翻閱你會發現不少工具其實都靠它定時檢查更新。

2.2. 建立群組

方便我們整理排程,同時避免我們誤刪系統程序,這邊我們事先建立全新的分組。請在頂層的 Task Scheduler Library 輕點右鍵選擇 New Folder。之後幫我們的資料夾隨便取個名稱代表自己,就可以按下建立囉。此時就擁有全新的群組,接著就來試著添加首個工作吧!

2.3. 建立排程

General

確認選擇群組後,看到右手邊 Actions >> Create Task 建立排程工作。我們先看 General 設定的上半,作為範例等會簡單發送訊息給用戶就好,由此這邊筆者命名為 msg,而方便我們回憶工作內容的敘述也建議寫一下,避免時間一久忘了。

接著看到下半,這個區塊則主要跟權限有關聯。這邊能夠選擇用誰的帳戶來執行這個任務,當然前提是作者有足夠權限代行。接著選擇指定用戶需不需要登入,而也能透過給予帳密的方式允許程式背景執行(這些密碼會經過加密保存在 Credential Manager)。而最後的 highest privileges 就同日常 使用管理員身分啟動,透過最高權限減少受到系統的阻攔。

Triggers

沿著分頁順序進到 Trigger 設定,這邊我們直接點擊底邊的 New 按鈕建立觸發器。最頂層的選單有多種觸發方式,這邊我用最基礎的定時作為範例,提醒電腦用戶準備睡覺。

除了觸發器的條件設定,此時看到畫面底端能看到任務何時截止(Expire),卽過了特定時間後便會失效。此時再看到 Advanced Settings 中間筆者勾選的地方,當觸發之後,設定在時限內重複幾次。其上方的 Delay 則是隨機延遲發動任務的時間,而下方的 if longer than 則是避免程式陷入死循環,當超出嘗試時間則代表程序不正常,將強制中止這個任務。

Actions

接著進到真正綁定動作的步驟,一樣點擊底邊的 New 按鈕綁定動作。這邊我們可以呼叫程式,並且使用其指令,或者直接執行寫好的腳本。

這邊範例啟動程序輸入 powershell.exe,接著我們在 Arguments 添加以下內容,這個程序會透過 JS 彈出視窗並顯示指定字樣。開頭的 -NoProfile 則是讓 PowerShell 不顯示執行紀錄。

BAT (Batchfile)
-Command "mshta.exe \"javascript:alert('Time for Bed'); close();\""

但這邊為了讓各位也體驗看看執行腳本,我們額外做些準備。首先來到任何地方新增一個 .bat (批次檔,類似 UNIX 的 Shell Script),這個格式仍被大量使用而且只要左鍵輕點兩下就能執行。雖然 .ps1 這種腳本,使用 Command Prompt (cmd.exe) 的繼任者 PowerShell (powershell.exe),功能更加完整與細緻,但必須透過指令列啟動。

而且透過 cmd.exe 內建也有方法可以呼叫其他程式,也能用相同的手法啟動 PowerShell 來執行特定指令。頂部的 @echo off 同樣是不記錄執行紀錄,但我故意新增底部的 pause,此時的指令列不會自動關閉,而是等待用戶互動。

BAT (Batchfile)
@echo off

cmd.exe /c powershell.exe -NoProfile -Command "mshta.exe \"javascript:alert('BAT'); close();\""

pause

接著我們可以先輕點兩下看看效果,測試看看這份腳本。接著我們額外新增新的動作,這次點選 Browse 使用剛剛寫完的腳本,就能完成建立。確認我們擁有兩種執行方式,尤其我們系列後續基本都會用到 Batch File 儲存腳本。

Conditions

上述都是比較基礎的控制,而額外條件可以說幾乎都與電源有關。而最底的則是關於網路連線,確保使用特定的來源。

Settings

最後則是設定整份工作的運作原則,這裡多數都是失敗重試的設定,還有重疊啟動時的邏輯。關於最頂部的 on demand 建議保留,允許用戶手動立即啟用。

2.4. 測試排程

除了定時之外,有些時候人員想要馬上使用,此時在群組內部找到剛建立的工作,右鍵 >> Run 就能夠立刻執行動作了,也就是不久前提到的 on demand。確保兩個視窗彈出之後,我們就能慢慢等到 23:00 跟 00:00 驗收成果~

這邊就交給各位自行測試,另外應該有人注意畫面右側 Actions 選單還有 Import 與 Export,這些工作能夠透過 XML 檔案的方式備份或者轉移。

3. 後話


學會使用這項工具,不僅能節省大量時間,還能讓電腦成為真正的工作夥伴,默默地為你分擔繁瑣任務,尤其像是熬夜備份這種不可避免的慣例工作。

但不可不說,排程只能夠幫忙在特定條件觸發,真正執行的動作勢必需要指令或者腳本,而這也是後續慢慢介紹與嘗試的。在系列我們將會介紹多種生活常見案例,但不局限於排程或重複動作,而以便捷與實用為主。

4. 參考


[1] Task Scheduler for developers — Microsoft Learn
https://learn.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-start-page

5. 延伸

[1] What is mshta and how to protect against it — McAfee
https://www.mcafee.com/learn/what-is-mshta-how-can-it-be-used-and-how-to-protect-against-it/

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.