【问题标题】:Formatting attribute output in MB without bytes in parentheses以 MB 为单位格式化属性输出,括号中不带字节
【发布时间】:2021-12-30 14:12:24
【问题描述】:

我编写了一个脚本,它从公共文件夹收集信息并将其输出到 .csv。一切都很好,除了 pf.FolderSize 属性以 MB 和 KB 显示(导出),括号中的字节例如:1.925 MB(2,018,497 字节)。我想总结整个事情,所以最好将结果格式化为 MB 而不带括号,这样我就可以轻松获得所有文件夹的整体大小。

这是工作

$publicFolders = Get-PublicFolder "\SomePublicFolderName" -Recurse -resultsize unlimited | 
Select-Object *
### Array to contain results
$results = @()
### Loop through and do the work
$publicFolders |ForEach-Object {
    $pf    = $_
    if ($pf.MailEnabled){
    $pfstat = Get-PublicFolderStatistics -Identity $pf.Identity | Where-Object {$_.User -notmatch "Default|Anonymous|S-X-X-XX"}
    $perms = Get-PublicFolderClientPermission -Identity $pf.Identity | Where-Object {$_.User -notmatch "Default|Anonymous|S-X-X-XX"} 
Foreach($perm in $perms){
    [PSCustomObject]@{
        PFName = $pf.Name
        PFIdentity =  $pf.Identity
        MailEnabled = $pf.MailEnabled
        FolderSize = $pf.FolderSize
        TotalItemSize = $pfstat.TotalItemSize
        ItemCount = $pfstat.ItemCount
        LastModificationTime = $pfstat.LastModificationTime
        UserWithPerms  = $perm.User
        AccessRights   = $perm | Select-Object -ExpandProperty AccessRights
        PrimaryAddy =  $mepf.PrimarySmtpAddress
        ForwardingAddy = $mepf.ForwardingAddress
    }
}
}}| Export-Csv $path -NoTypeInformation -append

我已经尝试了下面的代码,但是所有的输出都是相同的值,所以这不可能是正确的......

$pfstat = Get-PublicFolderStatistics -Identity $pf.Identity | Where-Object {$_.User -notmatch "Default|Anonymous|S-X-X-XX"} | Select-Object FolderPath,ItemCount,LastModificationTime @{
    N = "TotalItemSize (MB)";
    E = {
        "{0:N2}" -f ((($_.TotalItemSize -replace "[0-9\.]+ [A-Z]* \(([0-9,]+) bytes\)","`$1") -replace ",","") / 1MB)
    }
}

一如既往,提前致谢。我很想看看我哪里出了问题。

【问题讨论】:

  • 如果您检查$pf.FolderSize 的一个示例,它看起来与1.925 MB (2,018,497 bytes) 完全相同?
  • 您的 RegEx 对我有效,但您在 Select-Object 语句中缺少 ,,在 LastModificationTime 之后。

标签: powershell scripting formatting number-formatting


【解决方案1】:

如果您在服务器本身或从您的电脑上运行代码,则会有所不同。
在(较旧的 Exchange)服务器上运行时,TotalItemSize 可能不是[string],而是[Microsoft.Exchange.Data.Unlimited] 对象,它具有.Value 类型的.Value 属性[ByteQuantifiedSize]

要处理这个问题,请使用辅助函数

function Format-MailboxStatisticsSize($itemSize) {
    if ($itemSize -is [string]) {
        '{0:F2}' -f (($itemSize -replace '^.*\(([\d,]+) bytes\)', '$1' -replace '\D') / 1MB)
    }
    else {   # Microsoft.Exchange.Data.Unlimited
        '{0:F2}' -f ($itemSize.Value.ToBytes() / 1Mb)
    }
}

Format-MailboxStatisticsSize $pfstat.TotalItemSize  # "1.925 MB (2,018,497 bytes)" --> 1.92

【讨论】:

  • 好的,这看起来不错。测试。
  • 天才。像魅力一样工作。
猜你喜欢
  • 1970-01-01
  • 2015-07-16
  • 2021-08-02
  • 2014-02-11
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
相关资源
最近更新 更多