2016-11-25 6 views
4

Есть ли командлет, который округляет числа (все значения поплавка) на выходе?Командлет для округления чисел на выходе

Когда я запускаю следующую команду:

get-vm |select ProvisionedSpaceGB,UsedSpaceGB 

Я получаю этот вывод в виде таблицы:

  ProvisionedSpaceGB     UsedSpaceGB 
      ------------------     ----------- 
1224,0003194380551576614379883 349,88938544876873493194580078 
1224,0003062393516302108764648 321,74483488313853740692138672 
502,80292716529220342636108399 74,052481059916317462921142578 
700,00035238638520240783691406 484,56624550372362136840820312 
800,0003144945949316024780273 322,26342210918664932250976562 

Я знаю, что я могу определить, что в select командлета, как это:

get-vm | select @{ n="ProvisionedSpaceGB"; e={[math]::round($_.ProvisionedSpaceGB, 2)}}, 
    @{ n="UsedSpaceGB"; e={[math]::round($_.UsedSpaceGB, 2)}} 

А затем получить этот выход:

ProvisionedSpaceGB UsedSpaceGB 
------------------ ----------- 
      1224,00  349,58 
      1224,00  320,32 
      502,80  74,05 
      700,00  484,57 
      800,00  322,26 

Но должен быть более простым способом, как обжигающе его в другой командлет:

get-vm |select ProvisionedSpaceGB,UsedSpaceGB |RoundNumbers -Precision 2 

Чтобы получить второй выход.

+0

Я DON» Думаю, что есть, но вы можете создать свой собственный командлет для этого ... – 4c74356b41

ответ

5

Я сомневаюсь, есть встроенный PowerShell командлет для этого, однако, - вы могли бы написать свой собственный фильтр:

filter Round-FloatValues 
{ 
    Param(
     [parameter(ValueFromPipeline=$true)] 
     $objects, 

     [int]$Precision = 2   
    ) 

    $objects.PsObject.Properties | ForEach-Object { 
     if ($_.TypeNameOfValue -eq 'System.Double') 
     { 
      [math]::round($_.Value, $Precision) 
     } 
     else 
     { 
      $_.Value 
     } 
    } 
} 

Использование:

get-vm |select ProvisionedSpaceGB,UsedSpaceGB |Round-FloatValues -Precision 2