在PowerShell中将数字四舍五入的一行命令

7

我正在使用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个回答

9

尝试使用以下替代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

谢谢你,Hunter。在第一个尝试中,我已经非常接近了,但还没有完全正确。在第二个尝试中,我一无所知。你帮我省去了很多摸索的时间。我需要记住那个-join的东西。我相信我过去也可以用它。 - Josiah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接