在PowerShell单行中舍入一个数字

Jos*_*iah 4 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
Run Code Online (Sandbox Code Playgroud)

我想绕过UsedSpaceGB并列出所有NetworkName值,而不只是一个.我已经看到如何使用[Math] :: Round()来舍入脚本中的数字,但我无法在命令行中找到一个示例,我的尝试未能完成所需的结果.我怎么做?

Hun*_*son 5

尝试使用以下代替UsedSpaceGB:

@{ n="SpaceUsedGB"; e={[math]::round( $_.UsedSpaceGB, 3 )}}
Run Code Online (Sandbox Code Playgroud)

这将把UsedSpaceGB舍入到3个小数位并给该字段命名为SpaceUsedGB.要舍入到最接近的整数,请更改3为a 0,或者只使用:

@{ n="SpaceUsedGB"; e={[math]::round( $_.UsedSpaceGB )}}
Run Code Online (Sandbox Code Playgroud)

如果您不想将NetworkNames作为数组返回,而只是将其作为已排序的字符串,则可以将该表达式更改为:

@{n="Network"; e={(Get-NetworkAdapter -VM $_ | sort-object NetworkName | Select -unique -expand NetworkName) -join ', '}}
Run Code Online (Sandbox Code Playgroud)

因为我的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
Run Code Online (Sandbox Code Playgroud)