【问题标题】:Change user mail property with ADSI in PowerShell在 PowerShell 中使用 ADSI 更改用户邮件属性
【发布时间】:2012-07-30 17:01:18
【问题描述】:

我正在尝试使用 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 发现的用户

【问题讨论】:

    标签: powershell adsi email-address


    【解决方案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()
    }
    

    【讨论】:

    • 即使邮件是一个集合,您也必须直接为它分配一个字符串......违反直觉。谢谢。
    • @JaredDeckard mail 不是一个集合。 mail 是一种奇怪的属性,因为它不用于 Exchange 中的邮件路由。用于邮件路由的集合是proxyAddresses