J'essaie de renommer un utilisateur par programme et ne peux pas comprendre la pièce de la boîte aux lettres (proxyAddresses). Toute aide est appréciée ...vb.net question de répertoire actif - renommer le compte d'utilisateur et la boîte aux lettres
Code de travail ci-dessous ...
Public Shared Function renameUser(ByVal curUsername As String, ByVal newUsername As String) As Boolean
Dim emailSuffix As String = "@here.com"
Dim userPrincipalSuffix As String = "@here.now"
Dim user As New DirectoryEntry
Dim oSearcher As DirectorySearcher = Nothing
Dim oRoot As DirectoryEntry = Nothing
Dim oResult As SearchResult
Try
oRoot = New DirectoryEntry("LDAP://" & "ldapserver" & _
"/" & "OU=OUWithUsersToChange,OU=Site Users,DC=here,DC=now")
oSearcher = New DirectorySearcher(oRoot)
oSearcher.SearchScope = SearchScope.Subtree
oSearcher.Filter = "(&(objectCategory=person)(sAMAccountName=" & curUsername & "))"
oSearcher.PropertiesToLoad.Add("uid")
oSearcher.PropertiesToLoad.Add("mail")
oSearcher.PropertiesToLoad.Add("mailNickname")
oSearcher.PropertiesToLoad.Add("userPrincipalName")
oSearcher.PropertiesToLoad.Add("sAMAccountName")
oSearcher.PropertiesToLoad.Add("proxyAddresses")
oSearcher.PropertiesToLoad.Add("textEncodedORAddress")
oSearcher.PropertiesToLoad.Add("legacyExchangeDN")
oResult = oSearcher.FindOne
user = oResult.GetDirectoryEntry
Dim lNewList As New List(Of String)
For Each sAddress As String In user.Properties("proxyAddresses")
lNewList.Add(sAddress.Replace(curUsername, newUsername))
Next
Dim sTextEncodedORAddress As String = user.Properties.Item("textEncodedORAddress").Value
Dim sLegacyExchangeDN As String = user.Properties.Item("legacyExchangeDN").Value
user.Properties.Item("uid").Value = newUsername
user.Properties.Item("mail").Value = newUsername & emailSuffix
user.Properties.Item("mailNickname").Value = newUsername
user.Properties.Item("userPrincipalName").Value = newUsername & userPrincipalSuffix
user.Properties.Item("sAMAccountName").Value = newUsername
user.Properties("proxyAddresses").Value = lNewList.ToArray
user.Properties.Item("textEncodedORAddress").Value = sTextEncodedORAddress.Replace(curUsername, newUsername)
user.Properties.Item("legacyExchangeDN").Value = sLegacyExchangeDN.Replace(curUsername, newUsername)
user.CommitChanges()
user.Rename("CN=" & newUsername)
Return True
Catch ex As Exception
Return False
Finally
user.Dispose()
oRoot.Dispose()
oSearcher.Dispose()
oResult = Nothing
End Try
End Function
raison de dire qu'il est un tableau, j'ai pensé à utiliser la méthode add, mais espérait que je manquais une méthode simple de changement de nom (comme lors du renommage cn). Je vais tester l'ajout suivant dans le code pour supprimer les anciennes adresses smtp/x400 et les renvoyer si cela fonctionne. Merci. ... En passant en revue les paramètres LDAP de l'utilisateur avec adsiedit j'ai remarqué deux autres qui devraient être changés (ne pas avoir d'informations en main, repost). J'adorerais une méthode de renommer simple, si rien n'est originaire de .Net, je vais publier ce que je viens avec. –
Votre code a bien fonctionné, le code final est ci-dessus. Je devais aussi changer legacyExchangeDN et textEncodedORAddress. –