私は、powershell を介してユーザー アカウントの作成を自動化するスクリプトに取り組んでいます。その一環として、新しいユーザーの電子メール アドレスを設定します。デフォルト 01、デフォルト 02、およびデフォルト 03 の 3 つのデータベースにメールボックスを (多かれ少なかれ) 均等に分散させます。
アカウント数が最も少ないデータベースを特定するために、現在の統計を計算します。
function Get-MDBMailboxCount ([string]$DN) {
$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.SearchRoot = New-Object System.DirectoryServices.DirectoryEntry ("LDAP://$(([system.directoryservices.activedirectory.domain]::GetCurrentDomain()).Name)")
$Searcher.Filter = "(&(objectClass=user)(homeMDB=$DN))"
$Searcher.PageSize = 10000
$Searcher.SearchScope = "Subtree"
$results = $Searcher.FindAll()
$returnValue = $results.Count
#dispose of the search and results properly to avoid a memory leak
$Searcher.Dispose()
$results.Dispose()
return $returnValue
}
$Databases = (Get-MailboxDatabase) Where {$_.Name -like 'Default*'} | Select-Object Name, @{Name="Count";Expression={Get-MDBMailboxCount -DN $_.DistinguishedName}} | Sort-Object count
}
これは、列NameおよびCountを持つオブジェクト $databases を返します。次に、カウントが最も低い DB を抽出します。
$DB = $Databases |Sort-Object Count |Select-Object -First 1
ここまでは順調です :) しかし、私のスクリプトは一度に多くのアカウントを作成できるため、$databases オブジェクトでユーザーが作成されるたびにカウンターを更新したいと考えています。(処理に数秒かかる可能性があるため、関数を再度実行したくありません)。次のようにオブジェクトを更新できます。
($databases | Where {$_.Name -eq $($DB.Name)}).Count = $NewCount
しかし、Powershell オブジェクトの要素を更新する簡単な方法があるかどうか疑問に思っています。何かのようなもの
$Databases["Default01"].Count = $NewCount
そのようなことは可能ですか?または、オブジェクト内の要素を更新する他の/より良い方法はありませんか?
Get-MDBMailboxCount 関数のクレジットは リンクに移動します