将 Get-MailboxFolderStatistics FolderSize 交换为 MB

Exchange Get-MailboxFolderStatistics FolderSize to MB

早上好,作为英国人,这是多么悲伤的一天。

无论如何,我正在尝试将 MailboxFolderStatisticsFolderSize 转换为 MB。

下一行:

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

在我使用 Exchange Management Shell 时工作正常。

但是如果我在我的一个 Exchange 盒子中使用远程 PS 会话,我不会得到 FolderSize 的任何信息。

有什么想法吗?

这是因为您 运行 服务器上的 Exchange 管理 Shell 包含一个名为 Microsoft.Exchange.Data.ByteQuantifiedSize 的类型,该类型通过远程处理转换为 System.String。前者暴露了一个ToMB()方法,后者没有

我已经写了一个解决方法,但也许有一个更简单 and/or 更漂亮的方法:

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\)","`") -replace ",","") / 1MB)
        }
    }

这使用正则表达式将丑陋的字符串(例如:3.712 KB (3,801 bytes))转换为可用的数字。在我的系统上 , 不是有效的数字分组符号,因此我也必须将其从字符串中删除。

您可以使用以下行来获取以 [decimals]

表示的 $_.FolderSize
Select-Object  @{
N = "FS_MB";
        E = {
            [math]::round( ([decimal](($_.FolderSize -replace "[0-9\.]+ [A-Z]* \(([0-9,]+) bytes\)","`") -replace ",","") / 1MB),2)
        }
}

通常在查看文件夹大小时,希望按大小降序对它们进行排序。为此,我们需要知道以字节为单位的 FolderAndSubfolderSize,并将其存储在 bigint 属性 中,而不是 System.String将字节转换为 Kb、Mb、Gb 并不是什么高深的科学,所以我不会在这里深入探讨。

用于动态添加新的 属性 FolderAndSubfolderSizeBytes 的内联语法为了便于阅读,我使用了反引号分成几行)

Get-EXOMailbox -Identity user.name@domain.com`
| Get-EXOMailboxFolderStatistics `
| Select Name,FolderAndSubfolderSize,@{`
    name="FolderAndSubfolderSizeBytes";`
    expression={((($_.FolderAndSubfolderSize -replace '^(.*\()(.*)(\sbytes\))$','').Replace(',','')) -as [bigint])}} `
| Sort-Object -Property FolderAndSubfolderSizeBytes -Descending | ft

长手向变量对象添加新属性供以后重用

$mb = Get-EXOMailbox -Identity user.name@domain.com | Get-EXOMailboxFolderStatistics
foreach ($folder in $mb) {
    $folder | Add-Member -NotePropertyName FolderSizeBytes -NotePropertyValue ((($folder.FolderSize -replace '^(.*\()(.*)(\sbytes\))$','').Replace(',','')) -as [bigint])
    $folder | Add-Member -NotePropertyName FolderAndSubfolderSizeBytes -NotePropertyValue ((($folder.FolderAndSubfolderSize -replace '^(.*\()(.*)(\sbytes\))$','').Replace(',','')) -as [bigint])
}
$mb | Select Name,FolderPath,FolderAndSubfolderSize,FolderAndSubfolderSizeBytes | Sort-Object -Property FolderAndSubfolderSizeBytes -Descending | ft