Linuxではcron使えばいっか、なんですがWindowsだとどれを使えばいいか迷いますよね。 タスクスケジューラーだけじゃなく、PowerShellのRegister-ScheduledTaskやWSL上のcronなど 複数の選択肢があって、筆者もしばらく「なんとなくタスクスケジューラー」で済ませていました。
この記事では3つのツールの特徴と向き不向きを整理し、場面別の選び方をまとめています。 「とりあえずどれを使えばいいか」という判断にはフローチャートも用意したので参考にしてください。
この記事でわかること
- Windows上でスケジュール実行できる3つの手段(タスクスケジューラー・Register-ScheduledTask・WSL cron)の概要
- それぞれの向き不向きと使い分けの基準
- 迷ったときに使えるツール選択フローチャート
結論(忙しい人向け)
- とりあえず簡単にやりたい → タスクスケジューラー
- スクリプトで柔軟に制御したい → PowerShell
- Linux感覚でやりたい → WSL+cron
Windowsの自動化手段:3つのアプローチ
まず全体像を整理します。 3つとも「定期実行」という目的は同じですが、管理方法・得意な対象・Windows連携の深さが異なります。
| ツール | 特徴 | 主な用途 |
|---|---|---|
| タスクスケジューラー | GUIで設定できる。Windows標準搭載。 | バッチファイル・PowerShellスクリプトの定期実行 |
| PowerShell(Register-ScheduledTask) | コマンドラインでタスクを登録できる。 | CI/CDやプロビジョニングスクリプトへの組み込み |
| WSL上のcron | LinuxのcronをWSL内で動かす。 | Linuxスクリプト・シェルスクリプトの定期実行 |
タスクスケジューラー
Windowsに標準搭載されているGUIツールです。「スタートメニュー → タスク スケジューラ」から起動できます。
タスクスケジューラーの各タブ(全般・トリガー・操作・条件・設定)の設定内容はこちらで詳しく解説しています。

向いているケース
- GUIでポチポチ設定できる
.batや.ps1を定期実行したい- ログオン時・起動時など「イベントトリガー」を活用したい
- 管理PCが複数人で使われる環境で設定を視覚的に確認したい
「毎日9時にExcelのマクロを動かす」「PCが起動したら特定のスクリプトを走らせる」といった用途はタスクスケジューラーが最も手軽です。
向いていないケース
- スクリプトからタスクを登録・変更したい
- Gitなどでタスク定義をバージョン管理したい
- Linuxスクリプト(
.sh)をそのまま実行したい - cronライクな細かいスケジュール指定をしたい
GUIが強みな分「コードとして管理する」用途にはやや相性が悪いです。
PowerShellでスケジュール登録(Register-ScheduledTask)
タスクスケジューラーをPowerShellコマンドから操作する方法です。 GUIでできることをコマンドラインでも実現できます。
コマンドラインからタスクを登録する方法
以下は「毎日9時に指定のPowerShellスクリプトを実行する」タスクを登録する例です。
$action = New-ScheduledTaskAction `
-Execute "powershell.exe" `
-Argument "-NonInteractive -File C:\Scripts\【スクリプト名】.ps1"
$trigger = New-ScheduledTaskTrigger `
-Daily `
-At "09:00"
$settings = New-ScheduledTaskSettingsSet `
-ExecutionTimeLimit (New-TimeSpan -Hours 1) `
-RunOnlyIfNetworkAvailable
Register-ScheduledTask `
-TaskName "【タスク名】" `
-Action $action `
-Trigger $trigger `
-Settings $settings `
-RunLevel Highest- -Execute
実行するプログラムを指定します。PowerShell 7系はpwsh.exe、5.1系はpowershell.exeです。 - -Argument
プログラムに渡す引数です。-NonInteractiveを付けると対話的な入力プロンプトが出なくなります。 - -Daily -At “09:00”
毎日9時に実行するトリガーを設定します。-Weeklyや-RepetitionIntervalなど他のトリガーも使えます。 - -ExecutionTimeLimit
タスクが指定時間内に終わらなかった場合に強制終了する設定です。 - -RunLevel Highest
管理者権限でタスクを実行します。不要な場合は省略できます。
pwsh.exe(PowerShell 7系)かpowershell.exe(5.1系)かで挙動が変わる場面があります。 バージョン確認やアップグレード手順は以下で解説しています。

タスクを削除したいときはこちらです。
Unregister-ScheduledTask -TaskName "【タスク名】" -Confirm:$false注意:
Register-ScheduledTaskは管理者権限で実行する必要があります。PowerShellを右クリック →「管理者として実行」で起動してから使ってください。
スケジュールで呼び出す.ps1スクリプト自体が実行ポリシーの制限を受けて動かないケースがあります。 「このシステムではスクリプトの実行が無効になっているため~」というエラーが出た際はこちらを参照してください。

向いているケース
- AnsibleやシェルスクリプトでWindowsのタスクを自動登録したい
- プロビジョニング・セットアップスクリプトに組み込みたい
- Gitでタスク定義をコードとして管理したい
- 複数PCに同じタスクを一括展開したい
タスクスケジューラーとバックエンドは同じなので、GUIで確認・修正することもできます。 「コードで管理するけど確認はGUIで」という使い方ができるのが便利なところですね!
WSL上のcron
WSL(Windows Subsystem for Linux)でLinuxのcronを動かす方法です。Linuxライクなシェルスクリプトをそのまま定期実行したい場合に向いています。
WSLのインストール状況の確認方法や導入手順はQ&Aを参照してください。
WSLでcronを動かす手順
WSLはデフォルトでcronが自動起動しないため、少し工夫が必要です。
which cron/usr/sbin/cron何も表示されない場合はインストールされていないので、以下でインストールします。
sudo apt install croncrontab -e0 9 * * * /home/【ユーザー名】/scripts/【スクリプト名】.sh >> /home/【ユーザー名】/logs/output.log 2>&1WSLはWindowsのプロセスとして動いており、Windowsを再起動するとcronも止まります。 タスクスケジューラーと組み合わせてログオン時に自動起動させるのが現実的です。
$action = New-ScheduledTaskAction `
-Execute "wsl.exe" `
-Argument "-u root service cron start"
$trigger = New-ScheduledTaskTrigger -AtLogon
Register-ScheduledTask `
-TaskName "WSL-cron-autostart" `
-Action $action `
-Trigger $trigger `
-RunLevel HighestWindows側のファイルを操作する際の注意点
WSLからWindowsのファイルにアクセスする場合、パスの書き方が変わります。
| 環境 | パスの書き方 |
|---|---|
| Windowsのパス | C:\Users\【ユーザー名】\Documents |
| WSLからWindowsへのアクセス | /mnt/c/Users/【ユーザー名】/Documents |
| WindowsからWSLのファイルへ | \\wsl$\Ubuntu\home\【ユーザー名】 |
パフォーマンスの観点から、できるだけWSLのファイルシステム(/home/以下)で完結するスクリプトを書き、Windowsファイルの操作は最小限にするのが無難です。
注意:
cronの実行環境はログインシェルとは異なるため、PATHが通っていないコマンドが失敗することがあります。スクリプト内でコマンドのフルパスを指定するか、スクリプト冒頭でexport PATH=...を記述する習慣をつけておくといいです。
向いているケース
.shスクリプトをそのまま定期実行したい- Linuxサーバーで使っているcrontabをそのまま移植したい
awkやsedなどLinuxコマンドを組み合わせたスクリプトを動かしたい- 開発環境のセットアップやデータ処理をLinux環境で完結させたい
ツール選択フローチャート

Q&A
まとめ
- タスクスケジューラーはGUIで手軽に設定できるWindowsの標準ツールだよ。
- PowerShellの
Register-ScheduledTaskはタスクスケジューラーをコードで管理したいときに使うよ。 - WSL cronはLinuxスクリプトをそのまま動かしたいときに向いているよ。
- WSL cronはWindowsの再起動でプロセスが止まるため、タスクスケジューラーと組み合わせて自動起動させてね。
- 迷ったら「GUIで設定したい → タスクスケジューラー」「コード管理 → Register-ScheduledTask」「Linux環境 → WSL cron」で選んでね。
おまけ:サードパーティ製ツール
VisualCron – 個人〜中規模チーム向け
VisualCron: an automation, integration and task… | Visual Cron
Windowsサービスとして動作するためユーザーがログオンしていない状態でもタスクを実行できます。エンタープライズ向けツールと比べると価格帯が手頃で、コストパフォーマンスの面で評価されています。一方で使いやすさの点では慣れが必要という声もあります。
JAMS Scheduler – 中〜大規模向け
Workload Automation & Job Scheduling Software | JAMS
タスクスケジューラーの「単一マシン限定」という制約を解消し、クロスプラットフォームのジョブスケジューリングを一元管理できます。詳細なログ出力・エラーハンドリング・PowerShellサポートが特徴で、Microsoft環境との親和性が高いです。
ActiveBatch – 中〜大規模向け
ビジネスカレンダーやタイムゾーン対応、イベントベースの自動化、レポート・監査向けの分析機能を備えています。PowerShellスクリプト・バッチファイルとの統合性が高く評価されていますが、複雑なワークフローでは学習コストが高くなりがちなようです。
Stonebranch – 大規模〜エンタープライズ向け
Stonebranch | Hybrid IT Automation Solutions & Software
複数システムにまたがる集中型ワークフロー自動化が可能です。ビジュアルインターフェース・SLAトラッキング・リアルタイムモニタリングを標準で備えており、金融・医療などコンプライアンス追跡が必要な業界でも広く採用されています。






