我使用VMWare的PowerCLI运行此命令,从vCenter输出各种库存。
Get-VM | Select-Object Name,MemoryGB,NumCpu,UsedSpaceGB,@{n="TotalHDSizeGB"; e={(Get-HardDisk -VM $_ |Measure-Object -Sum CapacityGB).Sum}},@n="Network"; e={(Get-NetworkAdapter -VM $_ |Select -unique -expand NetworkName)}}Sort-Object Network|Export-Csv -Path vms.csv
我希望绕过UsedSpaceGB并列出所有NetworkName值,而不只是一个。我已经看过如何使用[Math] :: Round()来对脚本中的数字进行舍入,但是我还没能在命令行上找到一个例子,我的尝试未能达到预期的效果。我怎么做?
答案 0 :(得分:5)
尝试使用以下代替UsedSpaceGB:
@{ n="SpaceUsedGB"; e={[math]::round( $_.UsedSpaceGB, 3 )}}
将UsedSpaceGB舍入到3个小数位,并将该字段命名为SpaceUsedGB。要舍入到最接近的整数,请将3
更改为0
,或者只使用:
@{ n="SpaceUsedGB"; e={[math]::round( $_.UsedSpaceGB )}}
如果您不想将NetworkNames作为数组返回,而只是将其作为已排序的字符串,则可以将该表达式更改为:
@{n="Network"; e={(Get-NetworkAdapter -VM $_ | sort-object NetworkName | Select -unique -expand NetworkName) -join ', '}}
因为我的TotalHDSizeGB在某些情况下也有一堆小数位,我的命令的最终版本如下:
get-vm | Select-Object Name, MemoryGB, NumCpu, @{ n="DiskUsedGB"; e={[math]::round( $_.UsedSpaceGB )}}, @{ n="TotalHDSizeGB"; e={[math]::round((Get-HardDisk -vm $_ | Measure-Object -Sum CapacityGB).Sum)}}, @{n="Network"; e={(Get-NetworkAdapter -VM $_ | sort-object NetworkName | Select -unique -expand NetworkName) -join ', '}} | Export-Csv -Path vms.csv