2012-08-01 32 views
1

我试图使用PowerShell更新目录用户的电子邮件地址。在PowerShell中使用ADSI更改用户邮件属性

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

$BadUser = [adsi] $Account.Path 

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

$BadUser.SetInfo() 

的mail.Clear(),也不是mail.Add()似乎修改$ BadUser的与PowerGUI的调试时, 。

我有一个依赖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发现

回答

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 = "[email protected]" 
    $dirObject.CommitChanges() 
} 
+0

即使邮件是一个集合,你必须指定一个字符串直接对它...违反直觉。谢谢。 – 2012-08-02 00:18:33

+0

@JaredDeckard邮件不是一个集合。邮件是一种奇怪的属性,因为它不用于Exchange中的邮件路由。邮件路由中使用的一个集合是'proxyAddresses' – 2012-08-02 01:01:18