Задание запланированной задачи для запуска, когда пользователь не зарегистрирован
Я использую Командлеты запланированных задач 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
Вам нужно удалить $main и зарегистрировать задачу с помощью пользователя и пароля:
Register-ScheduledTask -TaskName $taskname `
-TaskPath "\my\path" `
-Action $action `
-Trigger $trigger `
-User "$env:USERDOMAIN\$env:USERNAME" `
-Password '[email protected]' `
-Settings $settings
Ответ 2
Параметр "Запустить ли пользователь включен или нет" в графическом интерфейсе планировщика заданий эквивалентен New-ScheduledTaskPrincipal -LogonType S4U
.
Ответ 3
Мне не нравится или одобряется самый высокий рейтинг ответа, так как тогда вы должны знать свои учетные данные в script, чтобы сделать это, и не можете делать это из-за чего-то вроде 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
Ответ 4
также контролирует проверку уровня выполнения:
RunLevel
Определяет требуемый уровень привилегий для запуска задач, которые связанных с принципалом.
например: "Самый высокий" или "Ограниченный"