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;
}
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. –
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 –
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