私はPowershell スケジュールタスク コマンドレットサーバー上でスケジュールされたタスクを作成します。
この API を使用して、ユーザーがログインしているかどうかに関係なく実行するように選択するにはどうすればよいですか?
以下のように、、、action
オブジェクトをtrigger
作成し、それらを に渡しました。principal
settings
Register-ScheduledTask
$action = New-ScheduledTaskAction -Execute foo.exe -Argument "bar baz"
$trigger = New-ScheduledTaskTrigger -Once -At $startTime -RepetitionInterval (New-TimeSpan -Minutes 1) -RepetitionDuration ([Timespan]::MaxValue)
$principal = New-ScheduledTaskPrincipal -UserId "$($env:USERDOMAIN)\$($env:USERNAME)" -LogonType ServiceAccount
$settings = New-ScheduledTaskSettingsSet -MultipleInstances Parallel
Register-ScheduledTask -TaskName $taskName -TaskPath "\my\path" -Action $action -Trigger $trigger -Settings $settings -Principal $principal
このようなスケジュールされたタスクを作成すると、デフォルトで「ユーザーがログオンしているときのみ実行」になります。
この質問COMオブジェクトを使用してこれを行う方法を示し、これですschtasks.exe を使用していますが、*-ScheduledTask*
コマンドレットを使用してこれを行うにはどうすればよいですか?
ベストアンサー1
私は自分の資格情報をスクリプトに埋め込むのが好きではありません (ここにある他のいくつかの例ではそうしています)。さらに、通常、Packer やその他のシステム/構成自動化、または疑似ランダムに生成されたパスワードを使用するクラウド プロバイダーからこれを行うことはできません。さらに、通常、資格情報をスクリプト、コマンド、またはタスクにハードコーディングすることは「悪い習慣」であり、簡単に漏洩する可能性があると思います。
これを行うには、このスレッドのコメントで Aeyoun が言及したが詳細には触れなかった、プリンシパルをシステム ユーザーとして実行するように適切に設定するという、もっと良い方法があります。私はこれに取り組んで解決しました。これは、ユーザーがログインしているかどうかに左右されず、自動的にバックグラウンドで実行されるタスクを SYSTEM ユーザーとしてスケジュールする方法です。
以下のコマンド セットは、管理者アクセスを必要とする重要なタスクをバックグラウンドでスケジュールする必要があったいくつかの場所で使用したものです。お役に立てば幸いです。
$action = New-ScheduledTaskAction -Execute foo.exe -Argument "bar baz"
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 1) -RepetitionDuration ([Timespan]::MaxValue)
$principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest
$settings = New-ScheduledTaskSettingsSet -MultipleInstances Parallel
Register-ScheduledTask -TaskName "tasknamehere" -TaskPath "\my\path" -Action $action -Trigger $trigger -Settings $settings -Principal $principal