schtasks.exeによるタスクスケジューラ管理

概要

本記事では、Windows Server および Windows クライアント環境で標準搭載されているコマンドラインツール schtasks.exe を使って、タスクスケジューラを管理する方法を解説します。

すべて PowerShell から実行することを前提 とし、行継続は バッククォート(`) で統一します。


変数表記について

変数名 設定例 説明
<<SERVER_NAME>> WSRV2025 対象サーバー名
<<ADMIN_USER>> Administrator 実行アカウント
<<TASK_NAME>> DailyTempCleanup タスク名
<<SCRIPT_PATH>> C:\Maintenance\cleanup_temp.ps1 実行するスクリプト
<<LOG_PATH>> C:\Maintenance\Logs ログフォルダー
<<BACKUP_PATH>> C:\Maintenance\Backups イベントログ退避先

PowerShell と CMD の行継続記号について

本記事のコマンドは PowerShell で実行する前提。

  • PowerShell:バッククォート(`)
  • CMD:キャレット(^)

例(PowerShell用):

schtasks.exe /Create `
  /TN "Example" `
  /SC DAILY `
  /ST 02:00 `
  /TR "powershell.exe -File example.ps1"

Step 1: schtasks.exe のサブコマンド概要

サブコマンド 用途
/Create 新規タスク作成
/Delete タスク削除
/Query タスク一覧・詳細・XML出力
/Change 設定変更
/Run 即時実行
/End 実行中タスク停止
/ShowSid 実行ユーザーSID確認

Step 2: /Create の基本構文と主なオプション

Step 2.1 構文(全体)

schtasks.exe /Create `
  /TN "<<TASK_NAME>>" `
  /TR "<<実行コマンド>>" `
  /SC スケジュール `
  [その他オプション...]

Step 2.2 よく使うオプション一覧

オプション 内容
/SC スケジュール指定(DAILY / WEEKLY / MONTHLY / ONLOGON / ONEVENT)
/MO 修飾子
/ST HH:mm 開始時刻
/D 実行日(1〜31 or MON/TUE…)
/RU 実行ユーザー
/RP パスワード(*で対話入力)
/RL HIGHEST 管理者権限
/F 強制上書き

/MO(修飾子)とは
スケジュールの頻度や位置を細かく指定する“周期指定のパラメーター”。

例:

  • 「3時間おき」 → /SC HOURLY /MO 3
  • 「2週間おきの実行」 → /SC WEEKLY /MO 2
  • 「毎月第2水曜日」 → /SC MONTHLY /MO SECOND /D WED
  • 「イベントトリガー」 → /SC MONTHLY /MO [XPath]

Step 2.3 スケジュール /SC の一覧

/SC 説明
DAILY 毎日
WEEKLY 毎週
MONTHLY 毎月
ONCE 1回
ONSTART 起動時
ONLOGON ログオン時
ONIDLE アイドル状態時
ONEVENT イベントログトリガー

Step 2.4 日次タスク

schtasks.exe /Create `
  /TN "DailyTempCleanup" `
  /TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\Maintenance\cleanup_temp.ps1 -DaysToKeep 7 -LogPath <<LOG_PATH>>" `
  /SC DAILY `
  /ST 02:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.5 ログオン時

schtasks.exe /Create `
  /TN "OnLogonAudit" `
  /SC ONLOGON `
  /TR "powershell.exe -File C:\Scripts\logon_audit.ps1" `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.6 起動時

schtasks.exe /Create `
  /TN "OnStartInit" `
  /SC ONSTART `
  /TR "powershell.exe -File C:\Scripts\startup_init.ps1" `
  /RU "SYSTEM" `
  /RL HIGHEST `
  /F

Step 2.7 イベントログトリガー

schtasks.exe /Create `
  /TN "Event101Handler" `
  /SC ONEVENT `
  /EC System `
  /MO "*[System/EventID=101]" `
  /TR "powershell.exe -File C:\Scripts\event_handler.ps1" `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.8 3時間ごとに実行

schtasks.exe /Create `
  /TN "Every3Hours" `
  /TR "powershell.exe -File script.ps1" `
  /SC HOURLY `
  /MO 3 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.9 毎月「第2水曜日」に実行

schtasks.exe /Create `
  /TN "SecondWednesdayTask" `
  /TR "powershell.exe -File task.ps1" `
  /SC MONTHLY `
  /MO SECOND `
  /D WED `
  /ST 03:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.10 毎月「最終日(LASTDAY)」に実行

schtasks.exe /Create `
  /TN "LastDayMonthly" `
  /TR "powershell.exe -File script.ps1" `
  /SC MONTHLY `
  /MO LASTDAY `
  /M * `
  /ST 01:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 2.11 「2週間おき」に実行

schtasks.exe /Create `
  /TN "Every2Weeks" `
  /TR "powershell.exe -File script.ps1" `
  /SC WEEKLY `
  /MO 2 `
  /D MON `
  /ST 05:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

Step 3: /Query(一覧・詳細)

オプション 説明
/FO TABLE テーブル形式で出力
/FO LIST 項目ごとの一覧形式で出力
/V 詳細情報(トリガー・アクションなど)を含める
/TN "<<TASK_NAME>>" 特定タスクのみ表示
schtasks.exe /Query /FO TABLE
schtasks.exe /Query /FO LIST /V
schtasks.exe /Query /TN "<<TASK_NAME>>" /FO LIST /V

Step 4: /Change(設定変更)

オプション 説明
/TN 対象タスク名
/RU 実行ユーザーを変更
/RP * 新しいパスワードを対話的に入力
/TR 実行コマンドを差し替え
/ENABLE /DISABLE タスクを有効化 / 無効化

注意: /Change では /SC, /MO, /D, /M などトリガー定義は変更できない
スケジュール自体を変えたい場合は、/Delete/Create で作り直すほうが安全。

実行ユーザー変更

schtasks.exe /Change `
  /TN "<<TASK_NAME>>" `
  /RU "<<ADMIN_USER>>" `
  /RP *

コマンド変更

schtasks.exe /Change `
  /TN "<<TASK_NAME>>" `
  /TR "powershell.exe -File <<SCRIPT_PATH>> -LogPath <<LOG_PATH>>"

有効化/無効化

schtasks.exe /Change /TN "<<TASK_NAME>>" /ENABLE
schtasks.exe /Change /TN "<<TASK_NAME>>" /DISABLE

Step 5: /Run(即時実行)・/End(停止)

オプション 説明
/Run タスクを即時実行
/I スケジュール制約(開始日・終了日など)を無視して実行
/End 実行中のタスクを停止
/TN 対象タスク名
schtasks.exe /Run /TN "<<TASK_NAME>>"
schtasks.exe /Run /TN "<<TASK_NAME>>" /I

schtasks.exe /End /TN "<<TASK_NAME>>"

Step 6: XML からタスクをインポート

XML インポート

オプション 説明
/XML ファイル XML 定義からタスクを作成
/RU 実行ユーザーを上書き指定
/RP * パスワードを対話入力
schtasks.exe /Create `
  /TN "<<TASK_NAME>>" `
  /XML "C:\TaskTemplates\<<TASK_NAME>>.xml" `
  /RU "<<ADMIN_USER>>" `
  /RP *

XML エクスポート(Query)

オプション 説明
/XML ONE タスク定義を 1 つの XML として出力
> ファイル名 リダイレクトでファイル保存
schtasks.exe /Query `
  /TN "<<TASK_NAME>>" `
  /XML ONE `
  > C:\TaskTemplates\<<TASK_NAME>>.xml

Step 8: /Delete (タスク削除)

オプション 説明
/Delete タスク削除モード
/TN 対象タスク名
/F 確認なしで強制削除
schtasks.exe /Delete /TN "<<TASK_NAME>>" /F

Step 9: /ShowSid

オプション 説明
/ShowSid 実行ユーザーに紐づくSIDを表示
/TN 対象タスク名
schtasks.exe /ShowSid /TN "<<TASK_NAME>>"

Step 10: リモートサーバーのタスク管理

オプション 説明
/S "<<SERVER_NAME>>" 接続先サーバー(リモート)
/U リモート接続に使用するユーザー
/P * リモート接続ユーザーのパスワード(*を指定した場合は対話入力)
それ以外 ローカルと同様にタスク定義
schtasks.exe /Create `
  /S "<<SERVER_NAME>>" `
  /U "<<ADMIN_USER>>" `
  /P * `
  /TN "<<TASK_NAME>>" `
  /TR "powershell.exe -File <<SCRIPT_PATH>>" `
  /SC DAILY `
  /ST 02:00 `
  /RU "<<ADMIN_USER>>" `
  /RL HIGHEST `
  /F

結論

schtasks.exe を使うことで、サーバー構築や自動化シナリオに組み込みやすくなります。

  • /SC/MO の組み合わせで、日次・週次・月次・第n週・最終日など柔軟なスケジュールを表現可能
  • ONLOGON / ONSTART / ONEVENT によりイベントドリブンな自動化も実現
  • /Query /XML/Create /XML でタスク定義のエクスポート/インポートが可能
  • /Change /Run /End /Delete /ShowSid で運用フェーズの管理を実施
  • /S /U /P によりリモートサーバーにも同じ定義を展開可能