将 Get-MailboxFolderStatistics FolderSize 交换为 MB
Exchange Get-MailboxFolderStatistics FolderSize to MB
早上好,作为英国人,这是多么悲伤的一天。
无论如何,我正在尝试将 MailboxFolderStatistics
的 FolderSize
转换为 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
早上好,作为英国人,这是多么悲伤的一天。
无论如何,我正在尝试将 MailboxFolderStatistics
的 FolderSize
转换为 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]
表示的 $_.FolderSizeSelect-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