Author Posts

August 10, 2016 at 3:41 am

I am trying to get the @{n='length (MB)';e= {$_.length/1MB}} to display in say 15.47 and not 15.477776998, is there an easy way to get this formatting in the below powershell?

$filepath = "C:\temp"

$Items = Get-ChildItem -Path $filepath -Recurse -Force

$files = $items | ? {!$_.PsIsContainer }

$files | Select-Object -Property @{n='FileName';e={$_.name.ToUpper()}}, @{n='length (MB)';e= {$_.length/1MB}} | Sort-Object -Property 'length (MB)' -Descending | Out-GridView

August 10, 2016 at 4:39 am

Hi Andrew,

You've got two options:

1. Round the numbers to the specified number of decimal places:

[System.Decimal]::Round($_.Length/1MB, 2)

2. Convert it to a string and format it using the .NET formatting feature:

($_.Length/1MB).ToString('N2')

https://gist.github.com/Dan1el42/5a809c0157202709769a5f8503357e97

I hope that helps.

Cheers
Daniel

August 10, 2016 at 5:04 am

Thanks Daniel – been banging my head on the wall for a while – cheers

August 10, 2016 at 1:24 pm

I'd have....

$files | Select-Object -Property @{n='FileName';e={$_.name.ToUpper()}}, @{n='length (MB)';e={ '{0:N2}' -f ($_.length/1MB) } | Sort-Object -Property 'length (MB)' -Descending | Out-GridView

Formatting (-f) operator. Uses the same notation as the ToString() trick above.