Задание запланированной задачи для запуска, когда пользователь не зарегистрирован - программирование
Подтвердить что ты не робот

Задание запланированной задачи для запуска, когда пользователь не зарегистрирован

Я использую Командлеты запланированных задач 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*?

4b9b3361

Ответ 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

Определяет требуемый уровень привилегий для запуска задач, которые связанных с принципалом.

например: "Самый высокий" или "Ограниченный"