我正在使用來產生單個屬性數組中項目數的計數,以及該屬性值的總和。當數組爲空時,是否可以讓Measure對象返回0而不是null/Nothing?
該數組來自導入的CSV,它通過where-object
進行過濾,所以有時數組有可能是空的。
在我建立具有用於創建輸出CSV的屬性的對象的陣列的代碼,我訪問小命令輸出的.count
和.sum
屬性幾個不同的輸入陣列。 (我猜,因爲即使是一個空數組也有一個數(0),但總和屬性不存在/已經存在了/已經有一個數組,但是這個數組並不存在/有因此,要添加屬性的Add-Member
cmdlet會失敗,並且「嘗試除以零」。
失敗的行正在處理一個百分比以將其放入屬性值(使用兩個數組的總和),但除數永遠不爲零,它的分紅有時只是零,所以我不明白爲什麼我得到除零誤差。
任何人都可以解釋如何強制返回如果陣列中沒有測量項目,或者避免除零誤差,那麼總和爲零?
示例代碼如下:
$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
的除零錯誤發生在代碼的工作了對開發環境的百分比(可用於CompanyB是空的)行。
至於你除以零錯誤:你可以驗證,'($ DevAllStats | Measure-Object -Property CPUTIME -Sum).Sum'或任何其他除數既不是'$ null'也不是'0'? –
看來,這也許是可能的,只是現在就嘗試你的建議。 –
您的建議是一種享受 - 也添加了一些我自己的額外檢查:-) –