在PowerShell中添加对象属性的值,而无需按名称访问每个属性

时间:2018-09-28 14:50:28

标签: powershell properties

我有一个API,它返回脚本运行的退出代码。我将返回对象保存在名为$ exitCodes的变量中。

$exitCodes

将产生这样的对象:

@{success=12; error=1; warning=0; unknown=0}

我的目标是能够计算$ exitCodes每个属性的值,而无需执行以下操作:

if ($exitCodes.success + $exitCodes.error + $exitCodes.warning + $exitCodes.unknown -gt 0)
{
    do something
}

有没有一种方法可以获取每个属性的值并将它们添加在一起而无需按名称调用每个属性?对于此示例,假定每个属性都将具有相同类型的值。

1 个答案:

答案 0 :(得分:1)

有两种方法可以解决此问题:

$exitCodes = @{success=12; error=1; warning=0; unknown=0}

$i = 0; $exitCodes.Values | ForEach-Object {$i += $_}; $i

($exitCodes.Values | Measure-Object -Sum).Sum

如果$exitCodes实际上是一个对象而不是哈希表(编辑:看起来确实是这种情况,只是您如何处理属性),请尝试使用隐藏的{{1 }}属性。

.psobject

如果$exitCodes = [pscustomobject]@{success=12; error=1; warning=0; unknown=0} ($exitCodes.psobject.Properties.Name | ForEach-Object { $exitCodes.$_ } | Measure-Object -Sum).Sum #or use $i += etc. 还有很多其他属性,您还可以根据$exitCodes返回的其他信息进行过滤。示例:

.psobject