【问题标题】:Function to return smallest db is not working返回最小数据库的函数不起作用
【发布时间】:2016-11-03 02:05:31
【问题描述】:

我有一些我在网上找到的 PoSH 函数,它将返回最小的交换数据库。在测试脚本时,我发现它没有按预期工作;即返回的最小数据库实际上并不正确。

这是代码:

#http://izzy.org/scripts/Exchange/Admin/Create-Mailbox.ps1
$DBFilter = "MBX_*" # Limit databases to only those that start with "Primary"

Function Get-SmallestDB {
    Try {
        $MBXDbs = Get-MailboxDatabase | ? {$_.Identity -like $DBFilter } 
        $MBXDBCount = $PSSessions.Count
    }
    Catch {
        $MBXDBCount =  0
    }
    If (!$MBXDbs) {ExitScript "find databases with a name that matches a filter of [$DBFilter]." $False}

    # Loop through each of the MBXDbs
    ForEach ($MBXDB in $MBXDbs) {
        # Get current mailboxes sizes by summing the size of all mailboxes and "Deleted Items" in the database
        $TotalItemSize = Get-MailboxStatistics -Database $MBXDB | %{$_.TotalItemSize.Value.ToMB()} | Measure-Object -sum
        $TotalDeletedItemSize = Get-MailboxStatistics -Database $MBXDB.DistinguishedName | %{$_.TotalDeletedItemSize.Value.ToMB()} | Measure-Object -sum
        $TotalDBSize = $TotalItemSize.Sum + $TotalDeletedItemSize.Sum
        Write-Host "$MBXDB $($TotalItemSize.Sum) $($TotalDeletedItemSize.Sum) $TotalDBSize"
        # Compare the sizes to find the smallest DB
        If (($TotalDBSize -lt $SmallestDBsize) -or ($SmallestDBsize -eq $null)) {
            $SmallestDBsize = $DBsize
            $SmallestDB = $MBXDB }}
    return $SmallestDB }

基本上,当我在我的 Exchange 环境中运行它时,它会返回“MBX_20”作为 $SmallestDB。但是我添加了一些调试代码(Write-Host 以输出 $($TotalItemSize.Sum, $($TotalDeletedItemSize.Sum) 和 $TotalDBSize 的值,结果是:

MBX_1 140561 5180 145741
MBX_2 190865 15882 206747
MBX_3 174393 1714 176107
MBX_4 122362 6479 128841
MBX_5 108833 15409 124242
MBX_6 196569 13793 210362
MBX_7 114298 2144 116442
MBX_8 140896 21558 162454
MBX_9 160024 13364 173388
MBX_10 188268 6046 194314
MBX_11 132256 15300 147556
MBX_12 173262 6486 179748
MBX_13 101107 3761 104868
MBX_14 131453 4930 136383
MBX_15 134682 4424 139106
MBX_16 146767 12484 159251
MBX_17 155224 2074 157298
MBX_18 117147 12270 129417
MBX_19 129101 6597 135698
MBX_20 134675 9059 143734

如您所见,带有 143734 的 MBX_20 并不是最小的分贝。我现在正在尝试修复代码,但我对 PoSH 不是很好。有什么建议吗?

【问题讨论】:

  • 进一步测试表明它输出列表中的最后一个数据库,而不是实际上最小的数据库。
  • 看起来您已经重命名了一些变量并遗漏了一个地方。 $SmallestDBsize = $DBsize 应该是 $SmallestDBsize = $TotalDBSize。否则$DBsize 未定义($null),所以($SmallestDBsize -eq $null) 始终为真,所以$SmallestDB 始终更新,因此它最终成为最后一个$MBXDB。 ($MBXDBCount = $PSSessions.Count 也应该是 $MBXDBCount = $MBXDbs.Count 吗?)
  • 不确定...什么?
  • 您的评论有效,我如何接受它作为答案?
  • 你不能接受 cmets 作为答案 - 所以我把它作为一个正确的答案,如果你愿意,你可以投票并勾选它以接受它。

标签: powershell exchange-server


【解决方案1】:

根据我的评论,我认为这是一个错字,并且

$SmallestDBsize = $DBsize 

应该是

$SmallestDBsize = $TotalDBSize

【讨论】:

    猜你喜欢
    • 2015-05-31
    • 2010-12-16
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2022-01-03
    • 2017-08-08
    • 2020-05-31
    相关资源
    最近更新 更多