インフラ基盤の備忘録 徒然なる日々のメモ

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

Powershell

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

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

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

スポンサーリンク

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

今回、タスクをコマンドで登録します。
コマンドで実行するということは、先に内容を決めておきましょう。
タスクスケジューラーに登録する内容としては、下記の項目を試してみようと思います。

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

スポンサーリンク

コマンド実行して結果を確認してみる

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

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

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

コマンド:

Get-Command | ? Name  -match “ScheduledTask”

スポンサーリンク

サンプルスクリプト

この中で、”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

まとめ

タスクスケジューラーの登録は普段あまりしないかもしれません。
サーバ構築で本番環境、検証環境など複数のタスク設定を行うときや、タスクが数多くある時に利用します。
今回ご紹介したコマンド内容をバッチ化すれば、大幅に工数が削減され、ミスも減り便利かと思います。

スポンサードサーチ

error: Content is protected !!