Get-CimInstance не работает при запуске из запланированной задачи

536
mwolfe02

У меня есть скрипт Powershell, который экспортирует список всех служб на моем локальном компьютере, используя следующую команду:

Get-CimInstance win32_service | Export-Csv $PSScriptRoot\Local\services.csv 

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

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

ОБНОВЛЕНИЕ : я запустил скрипт в обоих направлениях, когда ProcMon работал в фоновом режиме. Единственное различие, которое я заметил, состоит в том, что процесс запланированной задачи имел идентификатор сеанса 0, где при запуске сценария непосредственно имел идентификатор сеанса 4.

1

1 ответ на вопрос

1
mwolfe02

Я думаю, проблема в том, что я пометил задачу:

(o) Запустить, вошел ли пользователь в систему или нет

По словам Microsoft ,

Вы можете указать, что задача должна запускаться, даже если учетная запись, под которой запланировано выполнение задачи, не вошла в систему при ее запуске. Для этого установите переключатель « Выполнить» независимо от того, вошел пользователь в систему или нет . Если выбран этот переключатель, задачи не будут выполняться в интерактивном режиме. Чтобы задача выполнялась в интерактивном режиме, выберите « Выполнять только, когда пользователь вошел в систему ».

Ключевой частью этого является следующее предложение:

Чтобы задача выполнялась в интерактивном режиме, выберите « Выполнять только, когда пользователь вошел в систему ».

Я предполагаю, что powershell должен работать в интерактивном режиме, чтобы Get-CimInstanceкомандлет работал правильно. Я изменил свою задачу на Запускать только тогда, когда пользователь вошел в систему и теперь все работает.