Windowsの「タスクスケジューラ」は、定期的な処理や自動化されたメンテナンスを行うのに非常に便利なツールです。
この機能は通常GUIから操作されることが多いですが、PowerShellを使えば、より効率的かつスクリプト化された形でタスクを管理することができます。
本記事では、PowerShellのRegister-ScheduledTask
コマンドを使って新しいタスクを登録する方法について、初心者にもわかりやすく解説していきます。
GUIに頼らず、再現性のある運用や一括設定を目指す方にとって、PowerShellによるタスク登録は強力な武器になります。
Register-ScheduledTaskとは?
Register-ScheduledTask
は、Windows PowerShellのスケジューリング関連コマンドの1つで、新しいスケジュールタスクを作成してタスクスケジューラに登録するために使用されます。
このコマンドを使えば、次のような操作が可能になります:
- 指定のプログラムやスクリプトを特定のタイミングで自動実行
- 毎日・毎週・PC起動時・ログオン時など柔軟なトリガー設定
- 管理者権限での実行やユーザー指定の実行
従来のGUI操作では複雑になりがちな設定も、PowerShellなら数行で一括管理できます。
基本的な使い方
登録に必要な構成要素
Register-ScheduledTask
コマンドは単体では使用できません。いくつかのオブジェクトを事前に用意して、組み合わせる必要があります。主な構成は以下の通りです:
- アクション(Action):実行するコマンドやプログラム
- トリガー(Trigger):実行タイミング(例:毎日9時)
- プリンシパル(Principal):実行ユーザーや権限
- 設定(Settings):タスクの挙動(タイムアウト、再試行など)
例:毎日午前9時にメモ帳を開くタスク
$action = New-ScheduledTaskAction -Execute "notepad.exe"
$trigger = New-ScheduledTaskTrigger -Daily -At 9am
Register-ScheduledTask -TaskName "OpenNotepad" -Action $action -Trigger $trigger
このスクリプトでは、毎日9時にnotepad.exe
を起動するタスク「OpenNotepad」を作成しています。
アクション(New-ScheduledTaskAction)の詳細
アクションは、タスクが起動時に何を実行するかを定義します。
実行ファイルを指定
New-ScheduledTaskAction -Execute "C:\Path\To\MyScript.bat"
バッチファイルやPowerShellスクリプトなど、パスで指定可能です。
引数付きの実行
New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\Scripts\MyScript.ps1"
PowerShellスクリプトを引数付きで起動する方法です。-File
オプションで指定します。
トリガー(New-ScheduledTaskTrigger)の詳細
トリガーは、タスクの実行タイミングを設定します。
毎日の特定時刻
New-ScheduledTaskTrigger -Daily -At 7am
PC起動時に実行
New-ScheduledTaskTrigger -AtStartup
ユーザーのログオン時に実行
New-ScheduledTaskTrigger -AtLogOn
条件は複数組み合わせることもできます。
ユーザーと権限の設定(New-ScheduledTaskPrincipal)
タスクの実行権限を細かく設定できます。
現在のユーザーで登録(対話型)
$principal = New-ScheduledTaskPrincipal -UserId "$env:USERNAME" -LogonType Interactive
管理者として実行(最上位権限)
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
RunLevel Highest
を指定することで、管理者権限で実行可能になります。
設定(New-ScheduledTaskSettingsSet)のカスタマイズ
タスクのタイムアウトや再実行設定などを制御できます。
基本的な設定例
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable
上記の例では、バッテリー駆動中でも実行を許可する設定です。
すべてを組み合わせた実用的な例
以下は、PC起動時に自動でPowerShellスクリプトを実行するタスクを作成するフルスクリプトの例です。
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\Scripts\StartupTask.ps1"
$trigger = New-ScheduledTaskTrigger -AtStartup
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable
Register-ScheduledTask -TaskName "StartupScriptTask" -Action $action -Trigger $trigger -Principal $principal -Settings $settings
これにより、Windows起動時に「StartupTask.ps1」が自動で実行されるようになります。
タスクの確認と削除方法
登録済みタスクを確認
Get-ScheduledTask | Where-Object TaskName -eq "StartupScriptTask"
タスクの削除
Unregister-ScheduledTask -TaskName "StartupScriptTask" -Confirm:$false
テストで作ったタスクを削除する際に便利です。
トラブルシューティングと注意点
- パスのスペースに注意:パスにスペースがある場合は、ダブルクォーテーションで囲む必要があります。
- 管理者権限で実行:一部のタスク(特にSYSTEMアカウント利用時)は、PowerShellを「管理者として実行」で開く必要があります。
- 引数のミスに注意:
-Argument
の中でのスペースやオプション指定ミスはよくある落とし穴です。
まとめ
PowerShellのRegister-ScheduledTask
コマンドを使えば、Windowsタスクスケジューラを柔軟かつ自動的に制御することができます。GUIに比べて、スクリプトベースで再利用性が高く、大規模な環境でも一括管理が可能になります。
自動バックアップ、定期レポート、ログ取得などのタスクを設定する際、Register-ScheduledTask
は非常に有用です。この記事を参考に、ぜひ実務に活かしてみてください。