2016-11-02 1 views
0

가장 작은 교환 데이터베이스를 반환 할 온라인 PoSH 함수가 있습니다. 스크립트를 테스트 할 때 의도 한대로 작동하지 않는다는 것을 발견했습니다. 즉 반환 된 가장 작은 데이터베이스가 실제로 올바르지 않습니다. 난 내 Exchange 환경에서이 프로그램을 실행할 때 가장 작은 db를 반환하는 함수가 작동하지 않습니다.

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

은 기본적으로는 $ SmallestDB로 "MBX_20"를 반환 :

는 코드입니다. 하지만 일부 디버그 코드를 추가 ($에 대한 출력 값 ($ 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 

당신은 143,734으로 MBX_20을 볼 수 있듯이 . 지금 코드를 해결하기 위해 작은 DB하려하지하지만 난 포쉬에 아주 좋은 아니라고한다.?

+0

추가 테스트를 수행하면 실제로 가장 작은 db가 아니라 목록의 마지막 db가 출력됨을 나타냅니다. – v3rd1ct

+0

일부 변수의 이름을 변경하고 장소를 놓친 것처럼 보입니다. '$ SmallestDBsize = $ DBsize'는'$ SmallestDBsize = $ TotalDBSize'이어야합니다. 그렇지 않으면'$ DBsize'는 undefined ($ null)이므로'($ SmallestDBsize -eq $ null)'은 항상 참이므로'$ SmallestDB'는 항상 업데이트되므로 마지막 $ MBXDB가됩니다. (또한'$ MBXDBCount = $ PSSessions.Count'는'$ MBXDBCount = $ MBXDbs.Count'입니까?) – TessellatingHeckler

+0

확실하지 않습니다 ... 뭐라고 요? – TessellatingHeckler

답변

0

내 의견에서 촬영 모든 팁은, 나는 오타 및

생각
$SmallestDBsize = $DBsize 

해야한다

$SmallestDBsize = $TotalDBSize