Округление числа в однострочнике PowerShell

Я использую PowerCLI VMWare для запуска этой команды для вывода своего рода инвентаризации из 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() для округления чисел в сценариях, но мне не удалось найти пример в командной строке, и мои попытки не привели к желаемым результатам. Как я могу это сделать?


person Josiah    schedule 13.10.2014    source источник


Ответы (1)


Попробуйте использовать следующее вместо 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
person Hunter Eidson    schedule 13.10.2014
comment
Спасибо, Хантер. Я был ооочень близок в своих попытках в первом, но не совсем правильно. О втором я понятия не имел. Вы избавили меня от еще большего возни. Мне нужно помнить об этом. Я уверен, что мог бы использовать его в прошлом. - person Josiah; 14.10.2014