Ich weiß, dass diese Art von Frage schon einmal gestellt wurde, aber andere Methoden scheitern mir gerade.C# Active Directory: Abrufen des Domänennamens des Benutzers?
So wie es aussieht, fragt unser Windows-Dienst AD nach einem LDAP (d. H. LDAP: //10.32.16.80) und einer Liste von Benutzergruppen auf diesem AD-Server, nach denen gesucht werden soll. Es ruft alle Benutzer innerhalb dieser Gruppen ab und durchsucht diese Gruppen rekursiv nach weiteren Gruppen. Jeder Benutzer wird dann einer anderen Liste authentifizierter Benutzer hinzugefügt.
Dieser Teil der Anwendung wird erfolgreich ausgeführt. Wir benötigen jedoch den benutzerfreundlichen Domainnamen jedes Benutzers (dh den Teil seiner Login-Domain/Benutzername)
Wenn also ein Benutzer Teil der TEST-Domäne ist, heißt Steve: TEST/steve ist sein Login . Ich kann Steve in der AD finden, aber ich brauche auch "TEST" zusammen mit seinen AD-Informationen gespeichert werden.
Wieder kann ich 'steve' in Ordnung finden, indem ich einen Verzeichnissucher und die LDAP-IP benutze, die ich bekomme, aber wie kann ich den freundlichen Domain-Namen finden?
Wenn ich den folgenden Code versuche ich einen Fehler gegeben habe, wenn die ‚defaultNamingContext‘ zuzugreifen versuchen:
System.Runtime.InteropServices.COMException (0x8007202A): Der Authentifizierungsmechanismus ist nicht bekannt. Hier
ist der Code:
private string SetCurrentDomain(string server)
{
string result = string.Empty;
try
{
logger.Debug("'SetCurrentDomain'; Instantiating rootDSE LDAP");
DirectoryEntry ldapRoot = new DirectoryEntry(server + "/rootDSE", username, password);
logger.Debug("'SetCurrentDomain'; Successfully instantiated rootDSE LDAP");
logger.Debug("Attempting to retrieve 'defaultNamingContext'...");
string domain = (string)ldapRoot.Properties["defaultNamingContext"][0]; //THIS IS WHERE I HIT THE COMEXCEPTION
logger.Debug("Retrieved 'defaultNamingContext': " + domain);
if (!domain.IsEmpty())
{
logger.Debug("'SetCurrentDomain'; Instantiating partitions/configuration LDAP entry");
DirectoryEntry parts = new DirectoryEntry(server + "/CN=Partitions,CN=Configuration," + domain, username, password);
logger.Debug("'SetCurrentDomain'; Successfully instantiated partitions/configuration LDAP entry");
foreach (DirectoryEntry part in parts.Children)
{
if (part.Properties["nCName"] != null && (string)part.Properties["nCName"][0] != null)
{
logger.Debug("'SetCurrentDomain'; Found property nCName");
if ((string)part.Properties["nCName"][0] == domain)
{
logger.Debug("'SetCurrentDomain'; nCName matched defaultnamingcontext");
result = (string)part.Properties["NetBIOSName"][0];
logger.Debug("'SetCurrentDomain'; Found NetBIOSName (friendly domain name): " + result);
break;
}
}
}
}
logger.Debug("finished setting current domain...");
}
catch (Exception ex)
{
logger.Error("error attempting to set domain:" + ex.ToString());
}
return result;
}
bearbeiten
ich diese Stichprobe Methode, um einen Vorschlag hinzugefügt, um zu versuchen, aber ich erhalte eine Ausnahme: „Unbekannter Fehler“, wenn ich auf den „FindAll() "Rufen Sie den Sucher an. Der String übergeben wird, ist: "CN = TEST USER, CN = Users, DC = tempe, DC = ktregression, DC = com"
private string GetUserDomain(string dn)
{
string domain = string.Empty;
string firstPart = dn.Substring(dn.IndexOf("DC="));
string secondPart = "CN=Partitions,CN=Configuration," + firstPart;
DirectoryEntry root = new DirectoryEntry(secondPart, textBox2.Text, textBox3.Text);
DirectorySearcher searcher = new DirectorySearcher(root);
searcher.SearchScope = SearchScope.Subtree;
searcher.ReferralChasing = ReferralChasingOption.All;
searcher.Filter = "(&(nCName=" + firstPart + ")(nETBIOSName=*))";
try
{
SearchResultCollection rs = searcher.FindAll();
if (rs != null)
{
domain = GetProperty(rs[0], "nETBIOSName");
}
}
catch (Exception ex)
{
}
return domain;
Ist die Domäne 'TEST' unter derselben Gesamtstruktur wie die aktuelle Domäne? Wenn dies der Fall ist, können Sie die richtige Domäne für diesen Benutzer abfragen, da der Benutzer möglicherweise in Ihrer aktuellen Domäne vorhanden ist, aber nicht in der anderen Domäne. –
Ja, die Domäne TEST befindet sich in derselben Gesamtstruktur wie die aktuelle Domäne. Wie gehe ich in diesem Zusammenhang vor, um die Domain für einen bestimmten Benutzer abzufragen? Denken Sie daran, mein AD-Wissen ist begrenzt, in dem ich bin nicht versiert auf den Aufbau von LDAP-Strings und so ... –
mögliche Duplikate von [Get NT-Stil Domain \ Benutzer angegebene DN] (http://stackoverflow.com/ questions/1796426/get-nt-style-domain-user-given-dn) - Hier finden Sie Informationen darüber, wie Sie den DN eines Benutzers in seinen NETBIOS-Domänennamen konvertieren, was Sie hier wünschen. –