2016-11-25 17 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