Powershell 使用“LoadPercentage”进行性能监视
我正在尝试使用从WMI对象检索的值来设置性能监视的条件 以下是我使用的代码: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
$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;谢谢修正了那些问题。此外,编辑了原始问题,因为同样的错误也存在。重写我的部分答案来解决你的第二点。