Powershell 选择“使用其他计算属性”
是否有方法将同一select语句中的计算属性用于另一个计算属性。或者你必须为这个选择另一个单独的选项吗 我正在使用来自VMware的PowerCLI来尝试为主机生成一些内存统计数据(总计、已配置、%已配置)Powershell 选择“使用其他计算属性”,powershell,select,Powershell,Select,是否有方法将同一select语句中的计算属性用于另一个计算属性。或者你必须为这个选择另一个单独的选项吗 我正在使用来自VMware的PowerCLI来尝试为主机生成一些内存统计数据(总计、已配置、%已配置) get-vmhost | sort Parent | select Parent, Name, @{Name="MemoryTotalGB";E={[math]::Round($_.MemoryTotalGB)}}, @{Name="MemoryProvisionedGB";Expres
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
,以生成%calculation?而不是使用计算属性,您可以使用每个对象的循环并创建[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
为什么不计算一次集合(尽管BenH的ForEach对象
建议更优雅)
我特别避免了这一点,因为Get-VM操作可能非常昂贵。使用大量库存和远程连接时,Get-*语句越少越好。@raidzero如果您担心成本,则应使用每个对象的语句,或者强制使用双选择对象的语句。
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