Search code examples
powershellexchange-serverpowershell-remoting

Exchange Get-MailboxFolderStatistics FolderSize to MB


Morning folks, and what a sad day it is to be British.

Anyway, I'm trying to get MailboxFolderStatistics's FolderSize to MB.

The following line:

Get-MailboxFolderStatistics Joe.Bloggs |
    Where-Object { $_.FolderPath -ne "/Deletions" } |
    Select-Object FolderPath, @{ N = "FolderSize (MB)"; E = { $_.FolderSize.ToMB() } }

works fine when I'm using Exchange Management Shell.

But if I'm using a remote PS session into one of my Exchange boxes, I don't get anything for FolderSize.

Any ideas?


Solution

  • It's because the Exchange Management Shell you run on the server includes a type named Microsoft.Exchange.Data.ByteQuantifiedSize that gets converted to a System.String through remoting. The former exposes a ToMB() method, the latter does not.

    I have written a workaround, but maybe there is a simpler and/or prettier method :

    Get-MailboxFolderStatistics Joe.Bloggs |
        Where-Object { $_.FolderPath -ne "/Deletions" } |
        Select-Object FolderPath, @{
            N = "FolderSize (MB)";
            E = {
                "{0:N2}" -f ((($_.FolderSize -replace "[0-9\.]+ [A-Z]* \(([0-9,]+) bytes\)","`$1") -replace ",","") / 1MB)
            }
        }
    

    This uses a regular expression to turn the ugly string (example : 3.712 KB (3,801 bytes)) into a usable number. On my system , is not a valid digit grouping symbol so I had to remove it from the string, too.