Powershell 使用“LoadPercentage”进行性能监视

Powershell 使用“LoadPercentage”进行性能监视,powershell,powershell-5.0,Powershell,Powershell 5.0,我正在尝试使用从WMI对象检索的值来设置性能监视的条件 以下是我使用的代码: $CPULoad = Get-WMIObject -computername $computer win32_processor | ` Measure-Object -Property LoadPercentage -Average | ` Select Average $WarningCPU = ($CPULoad * 0.8) If ($CPULoad -ge $W

我正在尝试使用从WMI对象检索的值来设置性能监视的条件

以下是我使用的代码:

$CPULoad = Get-WMIObject -computername $computer win32_processor | `
           Measure-Object -Property LoadPercentage -Average | `
           Select Average

$WarningCPU = ($CPULoad * 0.8)

If ($CPULoad -ge $WarningCPU){
    [System.Windows.Forms.MessageBox]::Show("CPU Usage is over 80%","Warning","Ok","Warning")
}
我想通过使用这些代码将cpu使用率限制在80%,但是出现了以下情况:

方法调用失败,因为[System.Management.Automation.PSObject]不包含名为“op_Multiply”的方法

无法将{Average=14}与50进行比较,因为对象的类型不同,或者对象{Average=14}未实现IComparable

有没有办法使这些值具有可比性,以便当用户的cpu使用率超过80%时,messagebox会显示出来?

如@arco444所说,使用| Select-ExpandProperty Average来解决您的问题。这将使你的错误消失

我只想进一步讨论这个问题和类型的重要性

类型 代码中存在的问题是,从度量对象返回的平均属性不是数字。它看起来像一个,但类型不能用于计算

请记住,PowerShell cmdlet将返回对象并将其放置在管道中。它们可能看起来像数字和文字,但可能完全不同

您可以通过cmdlet Get成员传递其结果,或者如果您更喜欢其别名gm,来检查PowerShell cmdlet返回的内容的属性和类型

运行

Get-WMIObject -computername $computer win32_processor | `
           Measure-Object -Property LoadPercentage -Average | `
           Select Average | `
           Get-Member
我会告诉你平均分是多少

TypeName: Selected.Microsoft.PowerShell.Commands.GenericMeasureInfo
GenericMeasureInfo不能用于计算

但是,它会告诉您有一个名为Average的double类型的属性

Double很好,可以用于计算:

使用“选择对象-扩展属性”提取属性 现在的问题是,它必须从对象中提取。这就是Select-ExpandObject发挥作用的地方

它接受一个属性并从父对象中提取它,保留其类型

运行

Get-WMIObject -computername $computer win32_processor | `
           Measure-Object -Property LoadPercentage -Average | `
           Select -ExpandProperty Average | `
           Get-Member
告诉你现在的类型是

TypeName: System.Double

现在计算工作:

使用…|选择-ExpandProperty AverageIt worked!!非常感谢:你好,Kim,在代码块中发现了几个问题;1.通过运行引入的两个块是相同的,而我认为次要块应该使用ExpandProperty参数2。没有像Win32_Processor那样的WMI类,只有Win32_Processor;谢谢修正了那些问题。此外,编辑了原始问题,因为同样的错误也存在。重写我的部分答案来解决你的第二点。