Windowsの「タスクスケジューラ」は、定期的な処理や自動化されたメンテナンスを行うのに非常に便利なツールです。
この機能は通常GUIから操作されることが多いですが、PowerShellを使えば、より効率的かつスクリプト化された形でタスクを管理することができます。
本記事では、PowerShellのRegister-ScheduledTask
コマンドを使って新しいタスクを登録する方法について、初心者にもわかりやすく解説していきます。
GUIに頼らず、再現性のある運用や一括設定を目指す方にとって、PowerShellによるタスク登録は強力な武器になります。
Register-ScheduledTask
は、Windows PowerShellのスケジューリング関連コマンドの1つで、新しいスケジュールタスクを作成してタスクスケジューラに登録するために使用されます。
このコマンドを使えば、次のような操作が可能になります:
従来のGUI操作では複雑になりがちな設定も、PowerShellなら数行で一括管理できます。
Register-ScheduledTask
コマンドは単体では使用できません。いくつかのオブジェクトを事前に用意して、組み合わせる必要があります。主な構成は以下の通りです:
$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 -Execute "C:\Path\To\MyScript.bat"
バッチファイルやPowerShellスクリプトなど、パスで指定可能です。
New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\Scripts\MyScript.ps1"
PowerShellスクリプトを引数付きで起動する方法です。-File
オプションで指定します。
トリガーは、タスクの実行タイミングを設定します。
New-ScheduledTaskTrigger -Daily -At 7am
New-ScheduledTaskTrigger -AtStartup
New-ScheduledTaskTrigger -AtLogOn
条件は複数組み合わせることもできます。
タスクの実行権限を細かく設定できます。
$principal = New-ScheduledTaskPrincipal -UserId "$env:USERNAME" -LogonType Interactive
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
RunLevel Highest
を指定することで、管理者権限で実行可能になります。
タスクのタイムアウトや再実行設定などを制御できます。
$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
テストで作ったタスクを削除する際に便利です。
-Argument
の中でのスペースやオプション指定ミスはよくある落とし穴です。PowerShellのRegister-ScheduledTask
コマンドを使えば、Windowsタスクスケジューラを柔軟かつ自動的に制御することができます。GUIに比べて、スクリプトベースで再利用性が高く、大規模な環境でも一括管理が可能になります。
自動バックアップ、定期レポート、ログ取得などのタスクを設定する際、Register-ScheduledTask
は非常に有用です。この記事を参考に、ぜひ実務に活かしてみてください。