Get-Counter 未检索到有效详细信息

Posted

技术标签:

【中文标题】Get-Counter 未检索到有效详细信息【英文标题】:Get-Counter not retrieving valid details 【发布时间】:2020-06-19 11:11:20 【问题描述】:

我正在尝试使用 PowerShell 从任务管理器中检索 I/O 详细信息。下面是我现在尝试使用的脚本,并且已经取得了部分成功。

  $gc = get-counter -ComputerName $($service.ServerName) "\Process($Tservicename)\IO Other Bytes/sec" -ErrorAction SilentlyContinue 
        $OtherBytes=$gc.CounterSamples|Select cookedvalue

这里 $serviceName & ServerName 循环通过。以下是我面临的问题。

    我无法检索所有服务的 IO 其他字节详细信息,我在管理员模式下运行脚本,因此访问应该不是问题。

    如果有多个进程正在执行,例如 chrome.exe 将运行多个服务,上述脚本是否会给出累积结果,它是否会提供累积值。如果不是我如何提取 chrome 的每个进程的详细信息。

-- 更新问题--

我们正在使用 Get-Counter cmdlet 来检索 IO 读取和写入字节的详细信息。这对于大多数进程返回 0,这是由于无法访问系统进程还是由于访问问题。

-- 回答--

经过一番研究,发现 cmdlet 检索到的值是基于该特定实例的,这就是为什么我们需要使用 SampleInterval 对数据进行采样的原因。但是我的要求就足够了,使用 RawValue 参数,因为我正在寻找服务器启动后的值作为累积值。

    列表项

【问题讨论】:

【参考方案1】:

这里有两件重要的事情要理解:

    服务名称和进程名称之间没有一对一的关系 性能计数器对象实例名称不使用进程 ID(至少默认情况下)

这意味着您需要进行两个级别的实例转换才能理解计数器:

将服务转换为进程 ID - 我们可以为此使用 Win32_Service WMI 类 将进程 ID 转换为 Process 计数器实例 - 我们可以为此使用 Process(*)\ID Process 计数器值
function Get-ServiceCounter

  param(
    [Parameter(Mandatory = $true, Position = 0)]
    [string]
    $ServiceName,
    [Parameter(Position = 1)]
    [string]
    $ValueName
    [string]
    $Computername = '.'
  )

  $ID = Get-CimInstance Win32_Service -Filter "Name = '$ServiceName'" -ComputerName $ComputerName -ErrorAction SilentlyContinue |Select -Expand ProcessID
  if(-not $ID)
    Write-Error "Could not resolve process for service '$ServiceName'"
    return
  

  $Instance = Get-Counter -ComputerName $ComputerName "\Process(*)\ID Process" |Where-Object CookedValue -eq $ID -ErrorAction SilentlyContinue

  if(-not $Instance)
    Write-Error "Could not performance counter instance for Process ID $ID"
    return
  

  Get-Counter ($InstanceName -replace '\\id process',"\$ValueName") -ComputerName $ComputerName -ErrorAction SilentlyContinue

【讨论】:

感谢您的指导,让我继续努力。与此同时,我又用一个障碍更新了这个问题。 我已经调整了您提供的代码以修复错误,但是对于大多数服务,它为计数器返回零,例如“读取字节”/“写入字节”。有什么具体的事情可以捕捉到这些

以上是关于Get-Counter 未检索到有效详细信息的主要内容,如果未能解决你的问题,请参考以下文章

Django - DRF 删除/检索/补丁返回 404 详细信息:“未找到”

无法在firebase + vue中检索用户详细信息和图像

Pulsar-manager 未显示集群详细信息

无密码远程登录到远程服务器并执行命令并检索详细信息

C# 使用 SqlDataReader 从 SQL Server 检索数据到主详细信息列表

《用微信测试公众号慰问你的好兄弟/姐妹》:用java简单实现微信公众号消息推送(入门且详细且有效)