2016-11-25 65 views
4

是否有一個在輸出中舍入數字(所有浮點值)的cmdlet?Cmdlet在輸出中舍入數字

當我運行下面的命令:

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 cmdlet的是這樣的:

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 

但必須有一個更簡單的方法,如管道入另一個cmdlet:

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

要獲得第二輸出。

+0

我不沒想到有,但你可以爲你創建自己的cmdlet ... – 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