【Powershell】タスクスケジューラーのタスクをコマンドで登録する方法

Powershell

Powershell を使ってタスクスケジューラーでのタスク登録をしてみました。

サーバでのタスク登録は手動で行った方が早いと思いますが、もしタスク数が多く、検証環境とかで何度も登録しなおさないといけない場合に備えて、メモを残しておきます。

 

バッチファイルですと、schtasks.exe を使います。今回はPowershellコマンドレットを利用し、「タスクスケジュール登録」を確認したいと思います。

 

 




 

1.設定するべき項目を明確にする

今回、タスクをコマンドで登録します。

コマンドで実行するということは、先に内容を決めておきましょう。

タスクスケジューラーに登録する内容としては、下記の項目を試してみようと思います。

 

全般 タスク名
タスク実行アカウント
特権の有無
トリガー スケジュール(「毎日 02:00」など)
操作 プログラム
引数

 

 

 

 

2.コマンド確認する

Powershell を管理者で実行し、見てみましょう。

呼び出し方法は、[スタートメニュー] ⇒ [Windows Powershell] と辿っていき、右クリックして、[管理者として実行] を選択します。

コマンド実行するとタスクスケジューラー関連コマンドレットが現れます。

 

コマンド:

Get-Command | ? Name  -match “ScheduledTask”

 



 

3.サンプルスクリプト

この中で、”New-ScheduledTaskAction”、”New-ScheduledTaskTrigger”コマンドレットと “Register-ScheduledTask” でタスクを作成してみます。

 

◇操作の定義を設定する

まずは、「タスクで何をするか」を決めていきましょう。

Powershellスクリプトの実行する際での注意点は、プログラムは Powershell.exe となるのですが、必ずスクリプトファイルの引数を指定します。

コマンド:

New-ScheduledTaskAction -Execute <実行ファイル> -Argument <引数>

 

$TaskAction = 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 <時刻>

 

$TaskTrigger = New-ScheduledTaskTrigger -Daily -at “02:00:00”

 

 

補足:

日曜日とか曜日を指定しての実行は、”-DaysOfWeek” に実行曜日を記載します。

New-ScheduledTaskTrigger   -Weekly -DaysOfWeek Sunday -at “02:00:00”

 



◇全体的な登録

最後にタスクスケジューラで全体的なタスクを登録します。

 

通常のタスクスケジューラーですと、タスクライブラリー一覧に登録されますが、フォルダ階層のように用途によって階層分けできます。

 

今回タスクの階層を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

 

 

 

4.まとめ

タスクスケジューラーの登録は普段あまりしないかもしれません。

サーバ構築で本番環境、検証環境など複数のタスク設定を行うときや、タスクが数多くある時に利用します。

今回ご紹介したコマンド内容をバッチ化すれば、大幅に工数が削減され、ミスも減り便利かと思います。

 

スポンサードサーチ