Назад | Перейти на главную страницу

Как правильно запускать сценарии Powershell, содержащие операции BITS из планировщика задач?

Я пытаюсь выполнить автоматическое резервное копирование некоторых файлов и папок на основе конфигурации. Это делается с помощью Powershell 5, который, в свою очередь, полагается на фоновую интеллектуальную службу передачи (BITS). Например.:

Start-BitsTransfer $Source\* $Destination -RetryInterval 60 -RetryTimeout 600

Скрипты Powershell запускаются с помощью летучей мыши:

powershell -ExecutionPolicy unrestricted .\Main.ps1

Пакет выполняется с использованием запланированной задачи:

User account: AD service account
Run: whether user is logged on or not

Когда я запускаю пакет напрямую, используя ту же учетную запись, что и для запланированной задачи, он работает отлично. Когда я запускаю его из планировщика задач, операции BITS выдают следующую ошибку:

Запрошенная операция не была выполнена, потому что пользователь не вошел в сеть. Указанная служба не существует. (Исключение из HRESULT: 0x800704DD)

Я попытался изменить пользователя для службы BITS, установив для нее ту же учетную запись службы, которую я использую для запланированной задачи, но служба больше не запускается:

Не удалось запустить службу фоновой интеллектуальной службы передачи из-за следующей ошибки:
Учетная запись, указанная для этой службы, отличается от учетной записи, указанной для других служб, работающих в том же процессе.

Возвращаясь к запланированной задаче, я изменил ее на запуск «только когда пользователь вошел в систему». Конечно, это имело бы смысл только в том случае, если я установил для этого пользователя автоматический вход (в противном случае он не запустится, если не вошел в систему).

Вопрос: Как я могу автоматизировать резервное копирование с помощью BITS, не полагаясь на такие уловки, как автоматический вход?

Похоже, вы сможете запустить этот сценарий, только когда войдете в систему. Из документации MS "Использование Windows Powershell для создания заданий передачи BITS" найдено Вот.

При использовании командлетов * -BitsTransfer в процессе, который выполняется в неинтерактивном контексте, например в службе Windows, вы не сможете добавлять файлы в задания BITS, что может привести к приостановке. Чтобы задание продолжилось, необходимо войти в систему с идентификатором, который использовался для создания задания передачи. Например, при создании задания BITS в сценарии PowerShell, который выполнялся как задание планировщика заданий, передача BITS никогда не будет завершена, если в планировщике заданий не будет включен параметр задачи «Запускать только при входе пользователя в систему».

Попробуйте использовать Робокопия вместо.