有没有办法在同一个select语句中为另一个计算属性使用计算属性。或者您是否需要另外选择此选项?
我正在使用VMware的PowerCLI尝试为主机生成一些内存统计信息(总计,配置,%配置)。
get-vmhost | sort Parent |
select Parent, Name, @{Name="MemoryTotalGB";E={[math]::Round($_.MemoryTotalGB)}}, @{Name="MemoryProvisionedGB";Expression={$_ | get-vm | measure -sum MemoryGB | select -ExpandProperty Sum}} |
select Parent, Name, MemoryTotalGB, MemoryProvisionedGB, @{Name="MemoryProvisionedPercentage";E={[math]::Round($_.MemoryProvisionedGB / $_.MemoryTotalGB * 100)}} | ft
在第一个select
语句中,我计算主机上运行的VM内存总和为MemoryProvisionedGB
。在第二部分,我使用这笔金额来配置%。
是否有可能以某种方式引用第一个select语句中的计算属性MemoryProvisionedGB
来生成%计算?
答案 0 :(得分:1)
为什么不让你只计算一次收集(虽然BenH'} ForEach-Object
建议更优雅?
Get-VMHost |
Sort-Object -Property 'Parent' |
Select-Object -Property @(
'Parent'
'Name'
@{ N = 'MemoryTotalGB'
E = {[Math]::Round($PSItem.MemoryTotalGB)}
}
@{ N = 'MemoryProvisionedGB'
E = {($PSItem | Get-VM | Measure-Object -Sum 'MemoryGB').Sum}
}
@{ N = 'MemoryProvisionedPercentage'
E = {[Math]::Round(($PSItem | Get-VM | Measure-Object -Sum 'MemoryGB').Sum /
[Math]::Round($PSItem.MemoryTotalGB) * 100)
}
}
) | Format-Table
答案 1 :(得分:0)
您可以使用ForEach-Object
循环创建[pscustomobject]
,而不是使用计算属性。这将允许您创建几个要重用的变量。
Get-VMHost |
ForEach-Object {
$MemoryTotalGB = [math]::Round($_.MemoryTotalGB)
$MemoryProvisionedGB = ($_ | Get-VM | Measure-Object -Sum MemoryGB).Sum
[PSCustomObject]@{
'Parent' = $_.Parent
'MemoryTotalGB' = $MemoryTotalGB
'MemoryProvisionedGB' = $MemoryProvisionedGB
'MemoryProvisionedPercentage' = [math]::Round($MemoryProvisionedGB / $MemoryTotalGB * 100)
}
} |
Sort-Object Parent |
Format-Table