0

私は、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 関数のクレジットは リンクに移動します

4

1 に答える 1

0

現在の DB オブジェクトへの参照が既にある場合は、そのCountプロパティを直接更新するだけです。構文は$DB.Count = <new value>または$DB.Count += <amount to add>

$databases = <do expensive get operation, get initial counts>

foreach($newUser in $userList)
{
   $DB = $databases | Sort-Object Count | Select-Object -First 1
   < go add users to the particular $DB, keep track of how many new users >
   $DB.Count += $numNewUsers   # or $DB.Count = $totalUserCount, whatever you like
}

$DB$databases配列内と同じ基本オブジェクトを指す参照です。したがって、 を設定$DB.Countすると、 の適切な要素も更新され$databases、次に配列がソートされるときに、新しいカウントが使用されます。

于 2012-09-14T17:20:33.273 に答える