gpt4 book ai didi

arrays - 当数组为空时,是否可以让measure-object为Sum返回0而不是null/nothing?

转载 作者:行者123 更新时间:2023-12-02 06:43:05 25 4
gpt4 key购买 nike

我正在使用measure-object生成数组中单个属性的项目数,以及该属性的值的总和。

该数组来自通过 where-object 传递的导入 CSV。进行过滤,因此有时数组可能为空。

在我构建具有用于创建输出 CSV 的属性的对象数组的代码中,我访问 .count.sum measure-object的属性几个不同输入数组的 cmdlet 输出。

如果测量的数组为空,则计数仍将为 0,我可以使用该值(我猜是因为即使空数组也有计数(0),但 sum 属性不存在/没有值。因此,用于添加属性的 Add-Member cmdlet 失败并显示“尝试除以零”。

失败的行正在计算出一个百分比以放入属性值中(使用两个数组的总和),但除数永远不会为零,只是被除数有时可能为零,所以我不明白为什么我会得到除以零误差。

任何人都能够解释如何强制 measure-object如果数组中没有测量的项目,则返回总和为零,或者避免被零除错误?

示例代码如下:

$report = @()
$obj = New-Object System.Object
$obj | Add-Member -MemberType NoteProperty -Name Date -Value $Table[0].ENDDATE
$obj | Add-Member -MemberType NoteProperty -Name Environment -Value "PRODUCTION"
$obj | Add-Member -MemberType NoteProperty -Name Total_CPU_Seconds -Value ($ProdAllStats | Measure-Object -Property CPUTIME -Sum).Sum
$obj | Add-Member -MemberType NoteProperty -Name CompanyA_CPU_Seconds -Value ($CompAProdStats | Measure-Object -Property CPUTIME -Sum).Sum
$obj | Add-Member -MemberType NoteProperty -Name CompanyB_CPU_Seconds -Value ($CompBProdStats | Measure-Object -Property CPUTIME -Sum).Sum
$obj | Add-Member -MemberType NoteProperty -Name "%CompanyA_CPU" -Value ("{0:N2}" -f (($CompAProdStats | Measure-Object -Property CPUTIME -Sum).Sum/($ProdAllStats | Measure-Object -Property CPUTIME -Sum).Sum*100))
$obj | Add-Member -MemberType NoteProperty -Name "%CompanyB_CPU" -Value ("{0:N2}" -f (($CompBProdStats | Measure-Object -Property CPUTIME -Sum).Sum/($ProdAllStats | Measure-Object -Property CPUTIME -Sum).Sum*100))
$report += $obj
$obj = New-Object System.Object
$obj | Add-Member -MemberType NoteProperty -Name Date -Value $Table[0].ENDDATE
$obj | Add-Member -MemberType NoteProperty -Name Environment -Value "DEVELOPMENT"
$obj | Add-Member -MemberType NoteProperty -Name Total_CPU_Seconds -Value ($DevAllStats | Measure-Object -Property CPUTIME -Sum).Sum
$obj | Add-Member -MemberType NoteProperty -Name CompanyA_CPU_Seconds -Value ($CompADevStats | Measure-Object -Property CPUTIME -Sum).Sum
$obj | Add-Member -MemberType NoteProperty -Name CompanyB_CPU_Seconds -Value ($CompBDevStats | Measure-Object -Property CPUTIME -Sum).Sum
$obj | Add-Member -MemberType NoteProperty -Name "%CompanyA_CPU" -Value ("{0:N2}" -f (($CompADevStats | Measure-Object -Property CPUTIME -Sum).Sum/($DevAllStats | Measure-Object -Property CPUTIME -Sum).Sum*100))
$obj | Add-Member -MemberType NoteProperty -Name "%CompanyB_CPU" -Value ("{0:N2}" -f (($CompBDevStats | Measure-Object -Property CPUTIME -Sum).Sum/($DevAllStats | Measure-Object -Property CPUTIME -Sum).Sum*100))
$report += $obj

被零除错误发生在计算 DEVELOPMENT 环境百分比的代码行(对于 CompanyB 可以为空)。

最佳答案

如果数组恰好为空,您可以使用显式类型转换使 Measure-Object 返回总和为零而不是 null:

(@() | Measure-Object -Property Foo -Sum).Sum -as [double]

关于arrays - 当数组为空时,是否可以让measure-object为Sum返回0而不是null/nothing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30675530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com