Linuxではcronなんですけど。Windowsではやっぱりタスクスケジューラーなのかなぁ、くらいの印象しかありませんでした。しかしタスクスケジューラーのほかにPowerShellのRegister-ScheduledTask、WSL上のcronなど別の手段があるようです。
この記事ではそれぞれの特徴と向き不向きを整理し、どんな場面でどれを選べばいいかをフローチャートでも確認できるようにまとめています。
この記事でわかること
- Windows上でスケジュール実行できる3つの手段の概要
- タスクスケジューラー・PowerShell(Register-ScheduledTask)・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スクリプトを動かす場合はpwsh.exeです。(PowerShell 5.x系の場合は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やシェルスクリプトでタスクを自動登録したい
- プロビジョニング・セットアップスクリプトに組み込みたい
- Gitでタスク定義をコードとして管理したい
- 複数のPCに同じタスクを一括展開したい
タスクスケジューラーとバックエンドは同じなので、GUIで確認・修正することもできます。「コードで管理するけど確認はGUIで」という使い方もできるのが便利なところですね!
WSL上のcron
WSL(Windows Subsystem for Linux)でLinuxのcronを動かす方法です。Linuxライクなシェルスクリプトをそのまま定期実行したい場合に向いています。
WSLがPCにインストールされているか、インストールする方法はQAを参照してください。
WSLでcronを動かす方法
WSLはデフォルトでcronが自動起動しないため、少し工夫が必要です。
- Stepcronのインストール確認コマンド
which cronコマンド – 実行結果/usr/sbin/cron何も表示されない場合はインストールされていないので、下記でcronをインストールします。
コマンドsudo apt install cron - Step2crontabの編集コマンド
crontab -ecrontab# 毎日9時に実行する例 0 9 * * * /home/【ユーザー名】/scripts/【スクリプト名】.sh >> /home/【ユーザー名】/logs/output.log 2>&1 - Step3WSL起動時にcronを自動スタートさせる
WSLはWindowsのプロセスとして動いており、Windowsを再起動すると
cronも止まります。Windowsのタスクスケジューラーと組み合わせて自動起動させるのが現実的です。Windowsのユーザーログオン時にWSL内の
cronを起動するタスクを登録するという感じです。PowerShell$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 Highest
Windows側のファイルを操作する際の注意点
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
- QタスクスケジューラーとRegister-ScheduledTaskは同じもの?
- A
バックエンドは同じです。
Register-ScheduledTaskはタスクスケジューラーをPowerShellから操作するためのコマンドレットで、登録されたタスクはGUIのタスクスケジューラーでも確認・編集できます。
- QWSLがインストールされているか確認したい。
- A
WSLが入っているか確認したいときはこちらです。
PowerShellwsl --list --verbosePowerShell– 実行結果(インストール済みの場合)NAME STATE VERSION * docker-desktop Running 2 Ubuntu Running 2Ubuntuが表示されればWSLがインストールされています。VERSIONが2であればWSL2として動いています。
- QWSLがインストールされていない場合はどうすればいい?
- A
Windows 10 バージョン2004以降・Windows 11であれば、コマンド1行でインストールできます。
PowerShellwsl --installPowerShell– 実行結果(インストール済みの場合)ダウンロードしています: Ubuntu インストールしています: Ubuntu ディストリビューションが正常にインストールされました。'wsl.exe -d Ubuntu' を使用して起動できます Ubuntu を起動しています... Provisioning the new WSL instance Ubuntu This might take a while... Create a default Unix user account: 【アカウント名】 New password:【パスワードを入力】 Retype new password:【パスワードを再入力】 passwd: password updated successfully To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details.古いバージョンのWindows 10(バージョン1903〜2004未満)では
wsl --installが使えない場合があります。その場合はMicrosoft公式ドキュメントの「手動インストール手順」を参照してください。
- QWSL2とWSL1でcronの動作は変わる?
- A
基本的な使い方は変わりません。ただしWSL2はHyper-Vベースの軽量VMで動くため、ネットワーク構成がWSL1と異なります。外部ネットワークアクセスが必要なスクリプトでは注意が必要なこともあります。
- QWindowsがスリープするとタスクは実行されない?
- A
タスクスケジューラーの設定で「タスクを実行するためにコンピューターをスリープ解除する」にチェックを入れると、スリープ中でも実行タイミングでスリープ解除されます。ただしWSL cronの場合は、WSLプロセス自体が起動していないと動かないためスリープ解除だけでは不十分な場合があります。
- Qcronの書き方がわからない
- A
crontab.guruというサイトでcron式を視覚的に確認できます。「毎時15分」「毎週月曜9時」などをその場で検証できるのでとても便利です。
まとめ
- タスクスケジューラーは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サービスとして動作するため、ユーザーがログオンしていない状態でもタスクを実行できます。タスク自動化・スケジューリング・連携機能の面で高く評価されており、コストパフォーマンスが良いとされていますが、一方で使いやすさの点で難ありという指摘もあるようです。
エンタープライズ向けツールが数万ドル規模の初期投資を要するのに対し、VisualCronはライセンス料が必要ながら比較的手頃な価格帯に位置しています。
JAMS Scheduler – 中〜大規模向け
Workload Automation & Job Scheduling Software | JAMS
Windowsタスクスケジューラーの限界だった単一マシン限定の問題を解消し、クロスプラットフォームのジョブスケジューリングを一元管理できます。詳細なログ出力・エラーハンドリング・PowerShellサポートが特徴で、スクリプト主体の複雑なワークフロー管理に適しています。
WindowsサーバーやSQL Server、Active Directoryとのネイティブ統合が強みで、Microsoft中心の環境に向いています。
ActiveBatch – 中〜大規模向け
ビジネスカレンダーやタイムゾーンに対応したきめ細かいスケジューリング、イベントベースの自動化、レポートや監査のための豊富な分析機能を備えています。
インターフェースの使いやすさや、PowerShellスクリプト・バッチファイルとの統合性が高く評価されています。一方で複雑なワークフローでは学習コストが高くなりがちのようです。
Stonebranch – 大規模〜エンタープライズ向け
Stonebranch | Hybrid IT Automation Solutions & Software
Windowsタスクスケジューラーのシングルノード限定という制約に対し、複数システムにまたがる集中型ワークフロー自動化が可能です。ビジュアルインターフェース・SLAトラッキング・リアルタイムモニタリング・Integration Hubによる連携テンプレートを標準で備えています。
金融・医療など、コンプライアンス追跡が必要な業界でも広く採用されています。



