在PowerShell单行中舍入一个数字

时间:2014-10-13 22:42:37

标签: powershell vmware rounding powercli vcenter

我使用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()来对脚本中的数字进行舍入,但是我还没能在命令行上找到一个例子,我的尝试未能达到预期的效果。我怎么做?

1 个答案:

答案 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