タスクの実行ユーザーを定義するコマンドレットは、" New-ScheduledTaskPrincipal " ですが、これも実行結果を変数に格納します。
ローカルユーザー「u002」により、ログオンしていない時でもタスクを実行したい場合のコマンドレットは以下のようになります。
$User = New-ScheduledTaskPrincipal -UserId u002 -LogonType Password
※ ローカル セキュリティ ポリシー の「ユーザー権利の割り当て」により、「u002」に対して「バッチジョブによりログオン」の権利を割り当てておかないと、実際にタスクを実行することはできません。
※ ここでは入力しませんが、この「u002」というユーザーのパスワードは、名前と同じ「u002」だとしておきます。
タスクの実行内容を定義するコマンドレットは、" New-ScheduledTaskAction " です。
E ドライブ直下にあるスクリプトファイル「script.ps1」を実行する場合のコマンドレットは以下のようになります。
$Act = New-ScheduledTaskAction -Execute powershell.exe -Argument E:¥script.ps1
ここまでで、実行タイミング($Time)、実行ユーザー($User)、実行内容($Act)というタスクの三要素を定義できましたので、これらを元に新しいタスクを作成するのですが、これもまた新たな変数に格納します。
$Task = New-ScheduledTask -Trigger $Time -Principal $User -Action $Act
そして最後に、変数「$Task」 を用いて " Register-ScheduledTask " を実行することで、やっと新タスクがタスクスケジューラに登録されます。
この際に、オプションとして「タスク名」、「タスクのパス」、「実行ユーザー名」、「実行ユーザーのパスワード」を入力します。
このうち「実行ユーザー名」は既に変数「$User」によって入力済みなんですが、また書かないとコマンドレットがエラーします。
<Get 編 其の一> で作成したタスク「task」と同じ「test」フォルダー配下に、「task2」という名前で新タスクを作成する場合のコマンドレットは以下のようになります。
Register-ScheduledTask -InputObject $Task -TaskName task2 -TaskPath test -User u002 -Password u002
Register 編は以上です。
匿名 says:
$Timeの定義が無い・・・
susumushibata says:
コメントありがとうございます。
$Time の定義は、一つ前の記事「タスクスケジューラを PowerShell で管理してみる。<Register 編 其の一>」に書いてあります。
複数回に分割されている記事は、最初から最後まで通して読まれることをお勧めいたします。