Portanto, criei um script para reunir contadores usando Get-CimInstance
(que substitui Get-WMIObject
) e executá-lo como um serviço por meio de srvany.exe
.
Eu recebo um problema em que, para as classes .Net CLR, alguns processos não estão reunidos, especialmente um que desejo monitorar: w3wp
.
Ao executar o aplicativo em um console Powershell elevado, o comando retorna todos os processos que dependem do .Net, enquanto, se eu o executar em um console PowerShell padrão, apenas os processos locais do .Net serão reunidos.
Eu preciso configurar as permissões apropriadas para esse serviço para que ele reúna todas as métricas de todos os processos. Eu tentei executar o processo como administrador, uma conta de administrador de domínio, sem sucesso.
Eu tentei fornecer explicitamente todas as permissões em root\cimv2
para o administrador no console do wmimgmt.msc
WMI Admin sem resolver o problema.
O contexto de execução padrão para os serviços é SYSTEM, que também é o contexto de execução padrão do IIS.
Não sei quanto às permissões que preciso dar e onde permitir que esse serviço reúna todos os dados. Eu sinto que começar como um serviço de login como a conta de administrador deve ser suficiente, mas aparentemente não.
Exemplo do problema em
PS C:\Users\user> gcim Win32_PerfFormattedData_NETFramework_NETCLRSecurity | select-object Name
Name
----
_Global_
powershell
SCNotification
E agora, em um console do powershell Executar como administrador:
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
Usar a alternativa Get-Counter
em um console não administrativo é ainda pior:
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
Considerando que a informação correta é exibida em um console administrativo.