Настройка запланированной задачи на выполнение независимо от того, вошел ли пользователь в систему, с помощью PowerShell.

Вопрос или проблема

Настройка запланированной задачи на выполнение независимо от того, вошел ли пользователь в систему, с помощью 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 "Эти задачи выполняются независимо от того, вошел ли пользователь в систему"

Объяснение кода:

  1. Пользователь: Мы задаем переменную $user со значением NT AUTHORITY\SYSTEM. Это позволяет запланированному заданию выполняться с правами системного пользователя, что означает, что оно будет выполняться, даже если никто не вошел в систему.

  2. Триггер: Используется New-ScheduledTaskTrigger для создания триггера, который будет запускать задание ежедневно в полночь.

  3. Действие: С помощью New-ScheduledTaskAction указываем действие, которое будет выполняться. В нашем примере запускается программа foobar.exe с определёнными аргументами.

  4. Регистрация задания: Register-ScheduledTask регистрирует запланированное задание с указанными триггером и действием, а также с пользователем, который будет его выполнять и описанием задания.

Дополнительные замечания:

  • Убедитесь, что у указанной программы есть все необходимые права для выполнения в фоновом режиме без пользовательского интерфейса.
  • Вы также можете настроить дополнительные параметры в New-ScheduledTaskSettingsSet, если вам нужно настроить более специфичные или сложные параметры выполнения задания.

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

Оцените материал
Добавить комментарий

Капча загружается...