将Get-MailboxFolderStatistics FolderSize交换为MB

时间:2016-06-24 10:36:49

标签: powershell exchange-server powershell-remoting

早上的人们,以及英国人的悲伤日子。

无论如何,我正试图将MailboxFolderStatistics的{​​{1}}提升为MB。

以下一行:

FolderSize
当我使用Exchange命令行管理程序时,

正常工作。

但是如果我在我的一个Exchange框中使用远程PS会话,我就没有得到Get-MailboxFolderStatistics Joe.Bloggs | Where-Object { $_.FolderPath -ne "/Deletions" } | Select-Object FolderPath, @{ N = "FolderSize (MB)"; E = { $_.FolderSize.ToMB() } } 的任何内容。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

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

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

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)
        }
    }

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

答案 1 :(得分:0)

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

表示的$ _。FolderSize
props.put("bootstrap.servers", "localhost:9092");

答案 2 :(得分:0)

通常,在查看文件夹尺寸时,希望按尺寸降序对它们进行排序。为此,我们需要以字节为单位了解FolderAndSubfolderSize并将其存储在bigint属性中,而不是System.String中。 将Bytes转换为Kb,Mb,Gb并不是火箭科学,所以我在这里不再赘述。

内联语法,用于动态添加新属性FolderAndSubfolderSizeBytes(我仅使用反引号将多行内容分开阅读

Get-EXOMailbox -Identity user.name@domain.com`
| Get-EXOMailboxFolderStatistics `
| Select Name,FolderAndSubfolderSize,@{`
    name="FolderAndSubfolderSizeBytes";`
    expression={((($_.FolderAndSubfolderSize -replace '^(.*\()(.*)(\sbytes\))$','$2').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\))$','$2').Replace(',','')) -as [bigint])
    $folder | Add-Member -NotePropertyName FolderAndSubfolderSizeBytes -NotePropertyValue ((($folder.FolderAndSubfolderSize -replace '^(.*\()(.*)(\sbytes\))$','$2').Replace(',','')) -as [bigint])
}
$mb | Select Name,FolderPath,FolderAndSubfolderSize,FolderAndSubfolderSizeBytes | Sort-Object -Property FolderAndSubfolderSizeBytes -Descending | ft