我正在编写一个脚本来通过 powershell 自动创建用户帐户。其中之一是为新用户建立一个电子邮件地址。我们将邮箱(或多或少)平均分布在 3 个数据库上:Default01、Default02 和 Default03。
为了确定帐户数量最少的数据库,我计算了当前的统计数据。
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
}
这将返回一个对象 $databases ,其中包含Name和Count列。然后我提取计数最低的数据库。
$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 函数的功劳转到 链接