概要
本記事では、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 によりリモートサーバーにも同じ定義を展開可能