タスクスケジューラー vs PowerShell vs WSL cron:Windows自動化ツールの使い分けガイド

当ページのリンクには広告が含まれています。
Windowsの定期実行はどれが正解?タスクスケジューラー・PowerShell・WSL cronを比較して解説

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上のcronLinuxのcronをWSL内で動かす。Linuxスクリプト・シェルスクリプトの定期実行

タスクスケジューラー

Windowsに標準搭載されているGUIツールです。「スタートメニュー → タスク スケジューラ」から起動できます。

タスクスケジューラーの各タブ(全般・トリガー・操作・条件・設定)の設定内容はこちらで詳しく解説しています。

向いているケース

  • GUIでポチポチ設定できる
  • .bat.ps1を定期実行したい
  • ログオン時・起動時など「イベントトリガー」を活用したい
  • 管理PCが複数人で使われる環境で設定を視覚的に確認したい

「毎日9時にExcelのマクロを動かす」「PCが起動したら特定のスクリプトを走らせる」といった用途はタスクスケジューラーが最も手軽です。

向いていないケース

  • スクリプトからタスクを登録・変更したい
  • Gitなどでタスク定義をバージョン管理したい
  • Linuxスクリプト(.sh)をそのまま実行したい
  • cronライクな細かいスケジュール指定をしたい

GUIが強みな分「コードとして管理する」用途にはやや相性が悪いです。

PowerShellでスケジュール登録(Register-ScheduledTask)

タスクスケジューラーをPowerShellコマンドから操作する方法です。 GUIでできることをコマンドラインでも実現できます。

コマンドラインからタスクを登録する方法

以下は「毎日9時に指定のPowerShellスクリプトを実行する」タスクを登録する例です。

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系)かで挙動が変わる場面があります。 バージョン確認やアップグレード手順は以下で解説しています。

タスクを削除したいときはこちらです。

PowerShell
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が自動起動しないため、少し工夫が必要です。

Step
cronのインストール確認
コマンド
which cron
コマンド – 実行結果
/usr/sbin/cron

何も表示されない場合はインストールされていないので、以下でインストールします。

コマンド – 実行結果
sudo apt install cron
Step
crontabの編集
コマンド
crontab -e
crontab
0 9 * * * /home/【ユーザー名】/scripts/【スクリプト名】.sh >> /home/【ユーザー名】/logs/output.log 2>&1
Step
WSL起動時にcronを自動スタートさせる

WSLはWindowsのプロセスとして動いており、Windowsを再起動すると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をそのまま移植したい
  • awksedなどLinuxコマンドを組み合わせたスクリプトを動かしたい
  • 開発環境のセットアップやデータ処理をLinux環境で完結させたい

ツール選択フローチャート

タスクスケジューラー、PowerShell、WSL cronの選び方

Q&A

タスクスケジューラーとRegister-ScheduledTaskは同じもの?

バックエンドは同じです。Register-ScheduledTaskはタスクスケジューラーをPowerShellから操作するためのコマンドレットで、登録されたタスクはGUIのタスクスケジューラーでも確認・編集できます。

WSLがインストールされているか確認したい。
PowerShell
wsl --list --verbose
PowerShell – 実行結果(インストール済みの場合)
  NAME              STATE           VERSION
* docker-desktop    Running         2
  Ubuntu            Running         2

Ubuntuが表示されればWSLがインストールされています。VERSION2であればWSL2として動いています。

WSLがインストールされていない場合はどうすればいい?

Windows 10 バージョン2004以降・Windows 11であれば、コマンド1行でインストールできます。

PowerShell
wsl --install
PowerShell – 実行結果(インストール済みの場合)
ダウンロードしています: 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公式ドキュメントの「手動インストール手順」を参照してください。

WSL2とWSL1でcronの動作は変わる?

基本的な使い方は変わりません。ただしWSL2はHyper-Vベースの軽量VMで動くためネットワーク構成がWSL1と異なります。外部ネットワークアクセスが必要なスクリプトでは注意が必要なこともあります。

Windowsがスリープするとタスクは実行されない?

タスクスケジューラーの設定で「タスクを実行するためにコンピューターをスリープ解除する」にチェックを入れると、スリープ中でも実行タイミングでスリープ解除されます。WSL cronの場合はWSLプロセス自体が起動していないと動かないため、スリープ解除だけでは不十分な場合があります。

cronの書き方がわからない

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サービスとして動作するためユーザーがログオンしていない状態でもタスクを実行できます。エンタープライズ向けツールと比べると価格帯が手頃で、コストパフォーマンスの面で評価されています。一方で使いやすさの点では慣れが必要という声もあります。

JAMS Scheduler – 中〜大規模向け

Workload Automation & Job Scheduling Software | JAMS

タスクスケジューラーの「単一マシン限定」という制約を解消し、クロスプラットフォームのジョブスケジューリングを一元管理できます。詳細なログ出力・エラーハンドリング・PowerShellサポートが特徴で、Microsoft環境との親和性が高いです。

ActiveBatch – 中〜大規模向け

ActiveBatch By Redwood

ビジネスカレンダーやタイムゾーン対応、イベントベースの自動化、レポート・監査向けの分析機能を備えています。PowerShellスクリプト・バッチファイルとの統合性が高く評価されていますが、複雑なワークフローでは学習コストが高くなりがちなようです。

Stonebranch – 大規模〜エンタープライズ向け

Stonebranch | Hybrid IT Automation Solutions & Software

複数システムにまたがる集中型ワークフロー自動化が可能です。ビジュアルインターフェース・SLAトラッキング・リアルタイムモニタリングを標準で備えており、金融・医療などコンプライアンス追跡が必要な業界でも広く採用されています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次