Heute Morgen habe ich eine nette Methode entdeckt ( DirectoryEntry.Exists ) ), die prüfen sollte, ob auf dem Server ein Active Directory-Objekt existiert. Also habe ich es mit einem einfachen versucht:
%Vor%Natürlich fehlen Überladungen, um Anmeldeinformationen bereitzustellen. Denn wenn keine Zugangsdaten zur Verfügung gestellt werden, bekomme ich diese Ausnahme:
Anmeldefehler: unbekannter Benutzername oder Schlechtes Passwort. (System.DirectoryServices.DirectoryServicesCOMException)
Gibt es eine andere Option, die mir die Möglichkeit gibt, meinen Code auf dem AD-Server zu authentifizieren? Oder um die Existenz eines Objekts zu überprüfen?
Beantworten Sie also die Frage: unmöglich.
Schreiben Sie abschließend eine eigene Methode, um den DirectoryEntry anhand des angegebenen Namens mit den angegebenen Anmeldeinformationen zu erhalten. In beiden Fällen der Existenz / Nichtexistenz habe ich eine Instanz von DirectoryEntry erhalten. Um zu überprüfen, ob es sich um ein gültiges Objekt handelt, führe ich einen einfachen Versuch aus, um festzustellen, ob es zu einer Ausnahme kommt. Wenn ja, ist es ungültig.
Nasty Check, aber es funktioniert. Schade, dass die Standardmethode .net DirectoryEntry.Exists keine Überladung bietet, um Anmeldeinformationen genau wie der DirectoryEntry-Konstruktor bereitzustellen ...
Wenn der Benutzer, der den Prozess ausgeführt hat, keine Berechtigungen zum Aufrufen von DirectoryEntry.Exists besitzt, können Sie Identitätswechsel verwenden.
Dies kann hilfreich sein (diskutiert Identitätswechsel in einem AD-Kontext): Ссылка
Übrigens, wenn Sie bereits Anmeldeinformationen eines Benutzers haben, der Zugriff auf alles hat, was Sie brauchen, warum nicht nur den Prozess mit diesem Benutzer (z. B. / runas)?
Tags und Links .net c# active-directory directoryentry