Вопрос или проблема
Настройка запланированной задачи на выполнение независимо от того, вошел ли пользователь в систему, с помощью PowerShell.
Я настраиваю запланированные задачи на Windows Server 2016 через Powershell (не через schtasks.exe
).
$user = "Administrator"
$trigger = New-ScheduledTaskTrigger -Daily -At 0:00
$action = New-ScheduledTaskAction -Execute "C:\Windows\System32\forfiles.exe" -Argument '/p "C:\example"'
Register-ScheduledTask -Action $action -Trigger $trigger -User $user -TaskName "foobar"
Задачи не запускаются. У новой задачи включена опция Запуск только если пользователь вошел в систему
. Я хочу попробовать запустить задачи, если включена опция Запуск независимо от того, вошел ли пользователь в систему или нет
.
Я не вижу ничего в документации New-ScheduledTaskSettingsSet относительно этого.
Есть ли способ сделать это через Powershell?
Следуя рекомендациям Narzard – я использую это с успехом:
$user = "NT AUTHORITY\SYSTEM"
$trigger = New-ScheduledTaskTrigger -Daily -At 0:00
$action = New-ScheduledTaskAction -Execute "C:\Windows\System32\foobar.exe" -Argument '/baz "buzz"'
Register-ScheduledTask -Action $action -Trigger $trigger -User $user -TaskName "foobarbazbuzz" -Description "Эти задачи выполняются"
Есть некоторые детали о том, что представляет собой эта учетная запись $user
по адресу https://serverfault.com/questions/168752/windows-localsystem-vs-system.
Ответ или решение
Для настройки задания с расписанием на выполнение в Windows Server 2016 с помощью PowerShell, независимо от того, вошёл ли пользователь в систему, вам необходимо использовать учетную запись, которая имеет необходимые права и может запускать задания без активного сеанса пользователя. Один из таких вариантов — использовать учётную запись NT AUTHORITY\SYSTEM
, которая обладает правами администратора на локальном компьютере.
Вот пример того, как можно создать запланированное задание с использованием PowerShell:
# Указываем пользователя
$user = "NT AUTHORITY\SYSTEM"
# Создаем триггер для ежедневного выполнения задания в полночь
$trigger = New-ScheduledTaskTrigger -Daily -At 0:00
# Указываем действие, которое должно выполняться (например, запуск программы foobar.exe)
$action = New-ScheduledTaskAction -Execute "C:\Windows\System32\foobar.exe" -Argument '/baz "buzz"'
# Регистрируем запланированное задание с указанными параметрами
Register-ScheduledTask -Action $action -Trigger $trigger -User $user -TaskName "foobarbazbuzz" -Description "Эти задачи выполняются независимо от того, вошел ли пользователь в систему"
Объяснение кода:
-
Пользователь: Мы задаем переменную
$user
со значениемNT AUTHORITY\SYSTEM
. Это позволяет запланированному заданию выполняться с правами системного пользователя, что означает, что оно будет выполняться, даже если никто не вошел в систему. -
Триггер: Используется
New-ScheduledTaskTrigger
для создания триггера, который будет запускать задание ежедневно в полночь. -
Действие: С помощью
New-ScheduledTaskAction
указываем действие, которое будет выполняться. В нашем примере запускается программаfoobar.exe
с определёнными аргументами. - Регистрация задания:
Register-ScheduledTask
регистрирует запланированное задание с указанными триггером и действием, а также с пользователем, который будет его выполнять и описанием задания.
Дополнительные замечания:
- Убедитесь, что у указанной программы есть все необходимые права для выполнения в фоновом режиме без пользовательского интерфейса.
- Вы также можете настроить дополнительные параметры в
New-ScheduledTaskSettingsSet
, если вам нужно настроить более специфичные или сложные параметры выполнения задания.
Таким образом, с использованием данной конфигурации запланированное задание будет выполняться даже при отсутствии активного сеанса пользователя, что позволяет обеспечить бесперебойную работу критических процессов.