manikandanid Ответов: 1

Powershell в службе windows не может получить результаты от объектов WMI


У нас есть служба windows, которая работает под учетной записью, которая не является частью локального администратора. В служении, которое мы называем файл PowerShell, используя изменение панели. С помощью файла in powershell мы вызываем класс WMI

"$AVGCPU = вам-WmiObject а win32_processor | измерения-объект -собственность LoadPercentage -средний | Выберите объект -разверните среднее"

Приведенный выше код всегда возвращает 0.

Что я уже пробовал:

Когда я делаю пользователя локальным администратором, то возвращается значение загрузки процессора. Кроме того, когда я запускаю тот же код в powershell, запущенном под той же учетной записью пользователя (без предоставления привилегий локального администратора), я могу получить значение для использования процессора. Его только тогда, когда командлеты вызываются из службы windows, я получаю эту проблему. Из-за ограничений безопасности я не могу сделать пользователя локальным администратором. Любая идея, какие права должны быть предоставлены пользователю, что класс WMI возвращает значение при вызове из службы windows. Служба работает в windows 2008 R2 server.

Кроме того, если я запускаю службу windows от имени системного пользователя, я получаю значение загрузки процессора. Это должно быть что-то связанное с правами доступа. Есть ли у кого-нибудь какие-нибудь идеи по этому поводу

1 Ответов

Рейтинг:
1

Dave Kreskowiak

Службы работают на рабочем столе, отличном от того, на котором пользователь вошел в систему.

Если вы хотите, чтобы код пересекал границу между рабочими столами, да, для этого вам нужны права администратора.

Вы сами можете убедиться в этом довольно легко. Откройте Диспетчер задач как обычный пользователь. На вкладке Процессы вы видите только процессы, запущенные под вашей собственной учетной записью и рабочим столом. Если вы нажмете кнопку "Подробнее" внизу, он запросит учетные данные администратора, чтобы увидеть все процессы от других пользователей на компьютере.

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

РЕДАКТИРОВАТЬ
Используемая командная строка присваивает значение, возвращаемое параметром Select, переменной powershell, называемой $AVGCPU. Как вы проверяете возвращаемое значение в своем коде?


manikandanid

Если то, что вы говорите, верно, то при запуске команды powershell, запущенной от имени локального пользователя, значение загрузки процессора не должно быть возвращено. Но я в состоянии получить ценность. Только когда один и тот же сценарий powershell вызывается из службы windows (выполняется под тем же локальным пользователем), значения возвращаются только как ноль.

Dave Kreskowiak

Используемая командная строка присваивает значение, возвращаемое параметром Select, переменной powershell, называемой $AVGCPU. Как вы проверяете возвращаемое значение в своем коде?

Если вы думаете, что значение должно быть возвращено в качестве кода выхода объектом процесса, вы ошибаетесь. Возвращаемый 0 означает, что команда, которую вы запустили, выполняется без каких-либо ошибок.