Итак, я создал скрипт для сбора счетчиков, используя 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
В то время как он дает правильную информацию, запускаемую в консоли администратора.