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

Get-WmiCounter Win32_PerfFormattedData_NETFramework_NETCLRMemory Incomplete in non admin context

Итак, я создал скрипт для сбора счетчиков, используя Get-CimInstance (который заменяет Get-WMIObject) и запустите его как сервис через srvany.exe.

У меня возникает проблема, когда для классов .Net CLR некоторые процессы отсутствуют и не собраны, особенно тот, который я хочу отслеживать: w3wp. При запуске приложения в консоли Powershell с повышенными привилегиями команда возвращает все процессы, использующие .Net, тогда как если я запускаю ее в стандартной консоли PowerShell, собираются только локальные процессы .Net.

Мне нужно настроить соответствующие разрешения для этой службы, чтобы она собирала все показатели всех процессов. Я попытался запустить процесс от имени администратора, учетной записи администратора домена, но безрезультатно. Я пробовал явно указать все разрешения на root\cimv2 Администратору в wmimgmt.msc Консоль администратора WMI без решения проблемы.

Текущий контекст по умолчанию для служб - SYSTEM, который также является рабочим контекстом по умолчанию для IIS.

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

Пример проблемы в

PS C:\Users\user> gcim Win32_PerfFormattedData_NETFramework_NETCLRSecurity | select-object Name

Name
----
_Global_
powershell
SCNotification

А теперь в консоли PowerShell для запуска от имени администратора:

PS C:\WINDOWS\system32> gcim Win32_PerfFormattedData_NETFramework_NETCLRSecurity | select-object Name

Name
----
_Global_
powershell
w3wp
w3wp#1
w3wp#2
powershell#1
SCNotification
SCNotification#1

Используя альтернативу Get-Counter в консоли без прав администратора все еще хуже:

PS C:\Users\user> Get-Counter -Counter "\.NET CLR Memory(*)\*" -SampleInterval 1 -MaxSamples 1
Get-Counter : The specified object was not found on the computer.
At line:1 char:1
+ Get-Counter -Counter "\.NET CLR Memory(*)\*" -SampleInterval 1 -MaxSamples 1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidResult: (:) [Get-Counter], Exception
    + FullyQualifiedErrorId : CounterApiError,Microsoft.PowerShell.Commands.GetCounterCommand

В то время как он дает правильную информацию, запускаемую в консоли администратора.