Powershell を使ってタスクスケジューラーでのタスク登録をしてみました。
サーバでのタスク登録は手動で行った方が早いと思いますが、もしタスク数が多く、検証環境とかで何度も登録しなおさないといけない場合に備えて、メモを残しておきます。
バッチファイルですと、schtasks.exe を使います。今回はPowershellコマンドレットを利用し、「タスクスケジュール登録」を確認したいと思います。
設定するべき項目を明確にする
今回、タスクをコマンドで登録します。
コマンドで実行するということは、先に内容を決めておきましょう。
タスクスケジューラーに登録する内容としては、下記の項目を試してみようと思います。
全般 | タスク名 |
タスク実行アカウント | |
特権の有無 | |
トリガー | スケジュール(「毎日 02:00」など) |
操作 | プログラム |
引数 |
コマンド実行して結果を確認してみる
Powershell を管理者で実行し、見てみましょう。
呼び出し方法は、[スタートメニュー] ⇒ [Windows Powershell] と辿っていき、右クリックして、[管理者として実行] を選択します。
コマンド実行するとタスクスケジューラー関連コマンドレットが現れます。
Get-Command | ? Name -match “ScheduledTask” |
サンプルスクリプト
この中で、”New-ScheduledTaskAction”、”New-ScheduledTaskTrigger”コマンドレットと “Register-ScheduledTask” でタスクを作成してみます。
◇操作の定義を設定する
まずは、「タスクで何をするか」を決めていきましょう。
Powershellスクリプトの実行する際での注意点は、プログラムは Powershell.exe となるのですが、必ずスクリプトファイルの引数を指定します。
Get-Command | ? Name -match “ScheduledTask” |
New-ScheduledTaskAction -Execute <実行ファイル> -Argument <引数> #サンプルコマンド New-ScheduledTaskAction -Execute “C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe” -Argument “-file D:\work\test.ps1” |
◇実行の定義を設定する
実行スケジュールの定義です。時刻は、hh:mm:ss 表記です。
タスクは「実行スケジュールは毎日 02:00 に実行する」場合のサンプルです。
New-ScheduledTaskTrigger -Daily -at <時刻> #サンプルコマンド New-ScheduledTaskTrigger -Daily -at “02:00:00” #サンプルコマンド New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -at “02:00:00” |
補足:
日曜日とか曜日を指定しての実行は、”-DaysOfWeek” に実行曜日を記載します。
◇全体的な登録
最後にタスクスケジューラで全体的なタスクを登録します。
通常のタスクスケジューラーですと、タスクライブラリー一覧に登録されますが、フォルダ階層のように用途によって階層分けできます。
今回タスクの階層を1つ下げ、MyTaskというフォルダ配下にタスクを作成します。
タスク実行の注意点として、サーバ運用ですと、バックグラウンドタスクとして実行していることが多いので、権限を「最上位の特権」として指定します。
Register-ScheduledTask -Taskname <タスク名> -User <実行アカウント> -Password <実行アカウントパスワード> -RunLevel <権限> -Trigger <スケジュール> -Action <実行内容> #ユーザアカウント指定の場合 Register-ScheduledTask -TaskName “MyTask\CopyTask” -User “Contoso\Administrator” -Password “*********” -RunLevel highest -Trigger $TaskTrigger -Action $TaskAction #システム指定の場合 Register-ScheduledTask -TaskName “MyTask\CopyTask” -User “system” -RunLevel highest -Trigger $TaskTrigger -Action $TaskAction |
まとめ
タスクスケジューラーの登録は普段あまりしないかもしれません。
サーバ構築で本番環境、検証環境など複数のタスク設定を行うときや、タスクが数多くある時に利用します。
今回ご紹介したコマンド内容をバッチ化すれば、大幅に工数が削減され、ミスも減り便利かと思います。