【问题标题】:What are _Base properties in Powershell and how do I use them?Powershell 中的 _Base 属性是什么以及如何使用它们?
【发布时间】:2019-11-05 13:16:28
【问题描述】:

的输出为例
gwmi Win32_PerfRawData_PerfDisk_PhysicalDisk 

在我们找到的属性中

PercentDiskTime 

PercentDiskTime_Base 

docs.microsoft.com 上有关此类的文档对我来说毫无意义,因为它只声明后者是“PercentDiskTime 的基础值”

它们都是非常大的数字,我不明白如何将一个与另一个联系起来。

我的实际问题是我需要记录磁盘活动并且格式化的输出可能超过 100%,因此必须使用原始值手动计算该值。我在网上找到了关于这个问题的旧讨论,但解决方案指向死链接。我也找到了代码,但它不能正常工作。

谢谢

【问题讨论】:

    标签: powershell wmi wmi-query get-wmiobject


    【解决方案1】:

    PercentDiskTime_Base 属性表示 PercentDiskTime 在计算中使用的私有计时器 FormattedData_PerfDisk 来自 RawData强>_PerfDisk:

    PERF_PRECISION_100NS_TIMER

    说明:此计数器类型显示一个由两个计数器值组成的值:正在运行的事件的经过时间的计数 监控,以及来自同一私人计时器的“时钟”时间 单位。它以 100 ns 为单位测量时间。

    这种计数器类型与其他计数器定时器的不同之处在于时钟 刻度值伴随计数器值消除任何可能的 由于函数调用的延迟而导致的差异。精密计数器 当标准系统定时器不够精确时使用类型 准确的读数。

    通用类型:百分比

    公式NX – N0 / D1 – D0 其中分子 (N) 代表计数器值,分母 (D) 是 私人计时器。私有定时器的频率与 100 ns 相同 计时器。

    平均NX – N0 / D1 – D0

    示例PhysicalDisk\% Disk Time

    关于细节和解释,让我们开始分析 Qualifiers 的以下属性(对不起,微软不再定期更新链接内容 ):

    来自Win32_PerfRawData_PerfDisk_PhysicalDisk class

    PercentDiskTime:数据类型:uint64,访问类型:只读

    限定符CounterType (542573824) , DefaultScale (0) , PerfDetail (100)

    所选磁盘驱动器繁忙的已用时间百分比 为读取或写入请求提供服务。

    PercentDiskTime_Base:数据类型:uint64,访问类型:只读

    限定符CounterType (1073939712) , DefaultScale (0) , PerfDetail (100)

    PercentDiskTime 的基值。

    注意:

    • DefaultScale (sint32) = 10 的幂,用于显示计数器。对于零,估计最大值为10^0,或1,并且
    • PerfDetail (sint32) = 受众的知识水平。不曾用过。该值始终为100

    来自Win32_PerfFormattedData_PerfDisk_PhysicalDisk class

    PercentDiskTime:数据类型:uint64,访问类型:只读

    限定符:CookingType ("PERF_PRECISION_100NS_TIMER")、Counter ("PercentDiskTime")、PerfTimeStamp ("TimeStamp_Sys100NS")、 PerfTimeFreq ("Frequency_Sys100NS") , Base ("PercentDiskTime_Base")

    所选磁盘驱动器繁忙的已用时间百分比 为读取或写入请求提供服务。

    也可以查看Property Qualifiers for Performance Counter Classes

    一个简单的用法例子

    $xxx = Get-WmiObject Win32_PerfRawData_PerfDisk_PhysicalDisk
    $x0 = $xxx | Where-Object Name -eq '_Total' |
        Select-Object -Property Name, PercentDiskTime* 
    $x0
    Start-Sleep -Seconds 1
    $xxx = Get-WmiObject Win32_PerfRawData_PerfDisk_PhysicalDisk
    $xN = $xxx | Where-Object Name -eq '_Total' |
        Select-Object -Property Name, PercentDiskTime*
    '----'
    $xn
    '----'
    $FormattedPercentDiskTime = ( $xn.PercentDiskTime      - $x0.PercentDiskTime      ) / 
                                ( $xn.PercentDiskTime_Base - $x0.PercentDiskTime_Base )
    100*$FormattedPercentDiskTime             # not sure about the `100*` multiplier
    

    输出D:\PShell\SO\58712142.ps1

    Name   PercentDiskTime PercentDiskTime_Base
    ----   --------------- --------------------
    _Total      2863146220   132202140117518636
    ----
    _Total      2863151515   132202140128078551
    ----
    0,0501424490632737
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-08
      • 2011-07-04
      • 2017-10-26
      • 1970-01-01
      • 2016-12-18
      • 2013-11-07
      • 2020-05-02
      • 1970-01-01
      相关资源
      最近更新 更多