Gra*_*old 2 arrays powershell measure
我正在使用measure-object为单个属性生成数组中项目数的计数,以及该属性的值的总和。
该数组来自导入的 CSV,通过该 CSV 传递where-object以进行过滤,因此有时该数组可能为空。
在我构建具有用于创建输出 CSV 的属性的对象数组的代码中,我访问了几个不同输入数组的cmdlet 输出的.count和.sum属性measure-object。
如果测量的数组为空,则计数仍将具有我可以使用的 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
Run Code Online (Sandbox Code Playgroud)
除以零错误发生在计算 DEVELOPMENT 环境(对于 CompanyB 可以为空)的百分比的代码行上。
Measure-Object如果数组恰好为空,您可以使用显式类型转换来返回零而不是 null 的总和:
(@() | Measure-Object -Property Foo -Sum).Sum -as [double]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1634 次 |
| 最近记录: |