powershell - 在 PowerShell 单行中舍入一个数字

标签 powershell vmware rounding powercli vcenter

我正在使用 VMWare 的 PowerCLI 运行此命令以从 vCenter 输出各种 list 。

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() 对脚本中的数字进行四舍五入,但是我无法在命令行上找到示例,并且我的尝试未能实现预期的结果。我怎么做?

最佳答案

尝试使用以下代替 UsedSpaceGB:

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

这会将 UsedSpaceGB 舍入到小数点后 3 位,并将该字段命名为 SpaceUsedGB。要四舍五入到最接近的整数,请更改 30 ,或者只是使用:
@{ 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

关于powershell - 在 PowerShell 单行中舍入一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26350062/

相关文章:

iphone - 如何将应用程序图标的角变成圆角

c# - Math.round bug - 怎么办?

kubernetes - 现有Kubernetes集群的升级节点规范

powershell - 如何使用 Powershell Get-NetFirewallRule 确定 Windows 防火墙规则的程序路径

powershell - 如何在 Powershell 中启动一个比其父进程还长的后台作业?

windows - Powershell 正在失败 bamboo 任务,因为 -ExecutionPolicy bypass -Command 返回码是 134 而不是 0

Java Process.waitFor() 和 Readline 挂起

c# - ManagementException - 无效类

php - 折扣的 Magento paypal 舍入问题

Powershell 无法访问 SQL Server 2012 Microsoft.SqlServer.DTSRuntimeWrap