2014-09-10 1 views
3

J'ai une information utilisateur mise à jour de problème dans une base de données Active Directory ...Mise à jour des informations AD User

Quand je lance le code suivant je reçois cette erreur:

The specified directory service attribute or value does not exist

Le problème est le chemin il utilise pour enregistrer les informations est la suivante:

CN=AD Test,OU=Container Name,DC=us,DC=flg,DC=int 

Ad Test est le nom d'utilisateur dans AD que je suis en train de mettre à jour.

et je crois qu'il devrait être:

CN=Ad Test,OU=Container Name, OU=Server Name,DC=us,DC=flg,DC=int 

Je suis nouveau aux services d'annuaire, donc je serais très reconnaissant de toute l'aide pour savoir pourquoi je ne peux pas mettre à jour ... Merci d'avance

public bool UpdateActiveDirectory(string LdapServerName, string CustId, Employee SQLresult) 
{ 
    try 
    { 
     DirectoryEntry rootEntry = new DirectoryEntry("LDAP://" + LdapServerName, "usrename", "password", AuthenticationTypes.Secure); 

     DirectorySearcher searcher = new DirectorySearcher(rootEntry); 
     searcher.Filter = "(sAMAccountName=" + SQLresult.LogonNT + ")"; 
     searcher.PropertiesToLoad.Add("title"); 
     searcher.PropertiesToLoad.Add("street"); 
     searcher.PropertiesToLoad.Add("1"); 
     searcher.PropertiesToLoad.Add("st"); 
     searcher.PropertiesToLoad.Add("postalCode"); 
     searcher.PropertiesToLoad.Add("department"); 
     searcher.PropertiesToLoad.Add("mail"); 
     searcher.PropertiesToLoad.Add("manager"); 
     searcher.PropertiesToLoad.Add("telephoneNumber"); 

     SearchResult result = searcher.FindOne(); 

     if (result != null) 
     { 
      // create new object from search result  
      DirectoryEntry entryToUpdate = result.GetDirectoryEntry(); 

      entryToUpdate.Properties["title"].Value = SQLresult.Title; 
      entryToUpdate.Properties["street"].Value = SQLresult.Address; 
      entryToUpdate.Properties["1"].Value = SQLresult.City; 
      entryToUpdate.Properties["st"].Value = SQLresult.State; 
      entryToUpdate.Properties["postalCode"].Value = SQLresult.ZipCode; 
      entryToUpdate.Properties["department"].Value = SQLresult.Department; 
      entryToUpdate.Properties["mail"].Value = SQLresult.EMailID; 
      entryToUpdate.Properties["manager"].Value = SQLresult.ManagerName; 
      entryToUpdate.Properties["telephoneNumber"].Value = SQLresult.Phone; 

      entryToUpdate.CommitChanges(); 

      Console.WriteLine("User Updated"); 
     } 
     else 
     { 
      Console.WriteLine("User not found!"); 
     } 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine("Exception caught:\n\n" + e.ToString()); 
    } 

    return true; 
} 
+0

Peut-être juste une faute de frappe? La troisième propriété que vous essayez de mettre à jour: 'entryToUpdate.Properties [" 1 "]. Value = SQLresult.City;' - est-ce un * one * ('1') là? Ce devrait être un petit 'L' (' l') à la place. En outre: le nom du gestionnaire doit être le ** Nom distinctif ** du gestionnaire - l'ensemble 'CN = Manager, CN = Test Ad, OU = Nom du conteneur, OU = Nom du serveur, DC = us, DC = flg, DC = int' chose - pas seulement le nom lui-même. –

+0

Si cela ne sert à rien - revenez à la technique de débogage old-school: mise à jour juste une propriété ** single ** - si elle échoue -> c'est votre problème - comprendre * pourquoi * c'est un problème. Si ça marche: décommentez une seconde propriété et relancez -> répétez encore et encore, jusqu'à ce que vous trouviez votre coupable –

+0

Merci marc_s ... Cela a résolu ce problème ... Je reçois une erreur différente lorsque j'essaie de commettre le changements il dit: "Accès refusé." Je pensais que j'utiliserais les titres de compétences que j'ai reçus à l'origine. Comment pourrais-je les utiliser pendant le commit? – michaelk46

Répondre

3

Peut-être juste une faute de frappe?

La troisième propriété que vous essayez de mettre à jour:

entryToUpdate.Properties["1"].Value = SQLresult.City; 

est que un (1) là-dedans? Il devrait être un petit L (l) à la place.

également: le nom du gestionnaire doit être le nom distinctif du gestionnaire - l'ensemble

CN=Manager,CN=Ad Test,OU=Container Name, OU=Server Name,DC=us,DC=flg,DC=int 

chose - pas seulement le nom lui-même.

Si cela ne rien - juste revenir à la technique de débogage old-school:

  • mise à jour une seule propriété; Si cela échoue -> c'est votre cas de problème - comprendre pourquoi c'est un problème.
  • Si cela fonctionne: décommenter une deuxième propriété et exécutez à nouveau

-> répéter encore et encore, jusqu'à ce que vous trouverez votre coupable

Questions connexes