PowerShell脚本报错:[System.Object[]]不含'op_Division'方法求解
问题原因与解决方法
报错根源
报错[System.Object[]] does not contain a method named 'op_Division'的本质是:$cpu是多个Win32_Processor实例组成的数组,当直接调用$cpu.numberoflogicalprocessors时,PowerShell会返回包含所有处理器核心数的数组(即便每个值都是1),而数组无法直接参与除法运算,导致类型不匹配错误。
解决步骤
需要将数组转换为单个数值后再计算,有两种可行方法:
方法1:取数组首个元素
既然所有处理器的逻辑核心数都是1,直接取第一个实例的核心数即可:
$cpuUsagePercentage = [math]::Round($process.CPU *100 / $ts / $cpu[0].numberoflogicalprocessors, 2)
方法2:计算总核心数
如果后续机器可能存在不同核心数的处理器,更通用的方式是计算所有逻辑处理器的总数:
$totalLogicalCores = ($cpu.numberoflogicalprocessors | Measure-Object -Sum).Sum $cpuUsagePercentage = [math]::Round($process.CPU *100 / $ts / $totalLogicalCores, 2)
环境差异说明
同是PowerShell 5.1,部分机器正常运行是因为这些机器只有单个Win32_Processor实例(比如单处理器机器),此时$cpu不是数组,直接调用$cpu.numberoflogicalprocessors会返回单个数值,能正常运算;而报错的机器是多处理器(或多核被识别为多个处理器实例),导致$cpu变成数组,触发错误。
内容的提问来源于stack exchange,提问作者overflowed
相关产品推荐
相关产品推荐

