PowerShell计算对象属性乘积时如何校验属性存在并设默认值
PowerShell 多属性乘积累计求和(兼容属性缺失场景)
原有代码直接访问$_.B.Count,当对象不存在B属性时会返回空值,调用Count成员会出现非预期结果或报错,无法满足B属性缺失时用1参与计算的要求。
全版本兼容实现(支持PowerShell 5.1及以上所有正式版本)
$sum = ( $arrOfObjects | ForEach-Object { # 校验B属性是否存在,不存在则乘数取1 $bMultiplier = if ($_.PSObject.Properties['B']) { $_.B.Count } else { 1 } $_.A * $bMultiplier * $_.C.Count } | Measure-Object -Sum).Sum
逻辑说明
- 属性存在性校验通过
$_.PSObject.Properties['B']实现:这是PowerShell判断对象是否携带指定属性的标准方法,属性存在时返回属性元数据对象(布尔判定为真),属性不存在时返回$null(布尔判定为假),不会触发属性不存在的异常。 - 如果需要额外兼容「B属性存在但值为
$null」的边缘场景,可以将判断条件替换为$null -ne $_.B,此时无论B属性不存在、还是B属性值为null,都会使用1作为乘数,避免空值调用Count的报错。 - 如果运行环境为PowerShell 7及以上版本,可以用三元运算符简化遍历块内的写法:
# PowerShell 7+ 简化版本 $sum = ( $arrOfObjects | ForEach-Object { $_.A * ($_.PSObject.Properties['B'] ? $_.B.Count : 1) * $_.C.Count } | Measure-Object -Sum).Sum
内容的提问来源于stack exchange,提问作者noobie
相关产品推荐
相关产品推荐

