1

PowerShellを使用してディレクトリユーザーの電子メールアドレスを更新しようとしています。

次のコードでユーザーエントリのメールプロパティを変更できません。

$BadUser = [adsi] $Account.Path

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

$BadUser.SetInfo()

mail.Clear()もmail.Add()も、PowerGUIを使用してデバッグするときに$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 に答える