1

我正在尝试使用 PowerShell 更新目录用户的电子邮件地址。

我无法使用以下代码修改用户条目的邮件属性:

$BadUser = [adsi] $Account.Path

$BadUser.mail.Clear()
$BadUser.mail.Add($User.Email) | Out-Null

$BadUser.SetInfo()

使用 PowerGUI 进行调试时,mail.Clear() 和 mail.Add() 似乎都修改了 $BadUser。

我有一个依赖 QAD 插件的工作版本,如果可能,我想避免使用它。

$suf = $AD.Parent.Substring(10)

Connect-QADService -Service "$($AD.dc[0]).$suf" -ErrorVariable AD_Conn_Error -ErrorAction Stop -WarningAction Stop | Out-Null

Set-QADObject $Account.Properties.distinguishedname[0] -ObjectAttributes @{mail=$User.Email} | Out-Null

Disconnect-QADService

我避免使用 QAD 的原因:

  • 我正在跨 8 个域服务器搜索用户
  • ADSI 允许我在列表中保存多个连接的条目
  • QAD 一次可以连接到 1 个域
  • ADSI 似乎相对较快
  • QAD 存在大量崩溃的内存泄漏(1kB/s 坏)
  • QAD 无法“识别”一些 ADSI 被 cn 发现的用户
4

1 回答 1

1

这是一些示例代码:

$query= "(&(objectCategory=User)(cn=FirstName LastName))"
$OU = "LDAP://OU=Users,dc=subdomain,dc=company,dc=com"
$PageSize = 100
$objOU = New-Object System.DirectoryServices.DirectoryEntry($OU)
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objOU
$objSearcher.PageSize = $PageSize 
$objSearcher.Filter = $query
$objSearcher.SearchScope = "Subtree"
$colResults = $objSearcher.FindAll()
foreach($objResult in $colResults) {
    $dirObject = [ADSI]$objResult.GetDirectoryEntry()
    $dirObject.mail = "newaddress@company.com"
    $dirObject.CommitChanges()
}
于 2012-08-01T22:13:21.583 回答