web-dev-qa-db-ja.com

ユーザーがログインしていないときに実行するスケジュール済みタスクを設定する

Powershellスケジュールタスクコマンドレット を使用して、サーバーでスケジュールタスクを作成しています。

このAPIを使用して「ユーザーがログインしているかどうかに関係なく実行する」ことを選択するにはどうすればよいですか?

以下のように、actiontriggerprincipal、および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オブジェクトを使用してこれを行う方法を示し、 この1つ schtasks.exeを使用していますが、_*-ScheduledTask*_コマンドレットを使用してどうすればよいですか?

22
Peter

$ principalを削除し、ユーザーとパスワードでタスクを登録する必要があります。

Register-ScheduledTask -TaskName $taskname `
                       -TaskPath "\my\path" `
                       -Action $action `
                       -Trigger $trigger `
                       -User "$env:USERDOMAIN\$env:USERNAME" `
                       -Password 'P@ssw0rd' `
                       -Settings $settings
20
Shay Levy

これを行うには資格情報をスクリプトに登録する必要があり、Packerや他のシステム/構成の自動化などからこれを行うことはできないため、現在最も高い評価の回答を好まないか承認しません。これを行うためのより良い/適切な方法がありますが、Aeyounが言及しましたが、システムユーザーとして実行するプリンシパルを適切に設定する方法については詳しく説明しませんでした。

$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
33
Farley

タスクスケジューラGUIの[ユーザーがログインしているかどうかにかかわらず実行する]オプションは、New-ScheduledTaskPrincipal -LogonType S4Uと同等です。

13
Aeyoun

実行レベルチェックも制御します。

RunLevel

プリンシパルに関連付けられているタスクを実行するために必要な特権レベルを指定します。

例:「最高」または「制限」

0
Tilo