2012-08-01 1 views
1

J'essaie de mettre à jour l'adresse e-mail d'un utilisateur de répertoire avec PowerShell.Modifier la propriété de messagerie utilisateur avec ADSI dans PowerShell

Je suis incapable de modifier la propriété de messagerie d'une entrée de l'utilisateur avec le code suivant:

$BadUser = [adsi] $Account.Path 

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

$BadUser.SetInfo() 

Le mail.Clear() ni le mail.Add() semblent modifier BadUser $ lors du débogage avec PowerGUI .

J'ai une version de travail qui repose sur le plugin QAD, et je voudrais éviter de l'utiliser si possible.

$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 

raisons pour lesquelles j'évitaient QAD:

  • Je suis à la recherche pour les utilisateurs sur 8 serveurs de domaine
  • ADSI me permet d'enregistrer plusieurs entrées connectés dans une liste
  • QAD peut se connecter à 1 domaine à la fois
  • ADSI semble relativement rapide
  • QAD a des fuites de mémoire (1kB/s mauvais) qui se plantent en grandes quantités
  • QAD est incapable de « identifier » certains utilisateurs qui ADSI trouvé par cn

Répondre

1

Voici quelques exemples de code pour le faire:

$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

Même si la poste est une collection que vous devez attribuer une chaîne directement à elle ... Contre-intuitive. Merci. –

+0

@JaredDeckard 'mail' n'est pas une collection. 'mail' est une sorte de propriété étrange car elle n'est pas utilisée pour le routage du courrier dans Exchange. Celui qui est une collection et utilisé dans le routage du courrier est 'proxyAddresses' –

Questions connexes