Cmdlet在输出中舍入数字

Ger*_*der 4 powershell

是否有一个cmdlet可以对输出中的数字(所有浮点值)进行舍入?

当我运行以下命令时:

get-vm |select ProvisionedSpaceGB,UsedSpaceGB
Run Code Online (Sandbox Code Playgroud)

我把这个输出作为一个表:

            ProvisionedSpaceGB                    UsedSpaceGB
            ------------------                    -----------
1224,0003194380551576614379883 349,88938544876873493194580078
1224,0003062393516302108764648 321,74483488313853740692138672
502,80292716529220342636108399 74,052481059916317462921142578
700,00035238638520240783691406 484,56624550372362136840820312
 800,0003144945949316024780273 322,26342210918664932250976562
Run Code Online (Sandbox Code Playgroud)

我知道我可以在selectcmdlet中定义它,如下所示:

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

然后得到这个输出:

ProvisionedSpaceGB UsedSpaceGB
------------------ -----------
           1224,00      349,58
           1224,00      320,32
            502,80       74,05
            700,00      484,57
            800,00      322,26
Run Code Online (Sandbox Code Playgroud)

但必须有一个更简单的方法,比如将它管道到另一个cmdlet:

get-vm |select ProvisionedSpaceGB,UsedSpaceGB |RoundNumbers -Precision 2
Run Code Online (Sandbox Code Playgroud)

获得第二个输出.

Mar*_*ndl 5

我怀疑有一个内置的 PowerShell cmdlet,但是 - 您可以编写自己的过滤器:

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

get-vm |select ProvisionedSpaceGB,UsedSpaceGB |Round-FloatValues -Precision 2
Run Code Online (Sandbox Code Playgroud)