2017-09-10 1 views
-1

Ich verwende DirectoryEntry-KlasseWie überprüft man Zugriff auf OU in C#, DirectoryEntry?

Der Versuch, alle Benutzer von bestimmten OU und Unter OUs zu lesen.

folgenden Code ist Teil der Aufgabe

using(DirectoryEntry dEntry = new DirectoryEntry(dn)) 
using(DirectorySearcher dSearcher = new DirectorySearcher(dEntry)) 
{ 
    dSearcher.SearchScope = SearchScope.Subtree; 
    dSearcher.Filter = "(&(objectClass=user) (objectCategory=person))"; 
    foreach(SearchResult in dSearcher.FindAll()) 
    { 
     //Do something... 
    } 
} 

einige Unter OU geschützt sind für den aktuellen Benutzer aus der Lektüre. Und ich habe Aufgabe Ausnahme "einen oder mehrere Fehler accured" Ich suche nach Möglichkeit zu überprüfen, ob OU nicht zugänglich ist und überspringen Sie es. Und diese OU zu schreiben, um zu protokollieren. Ich habe versucht, folgende:

public void GetOu(List<MyUser> list, string path) 
{ 
    using (DirectoryEntry dEntry = new  DirectoryEntry(path)) 
    using(DirectorySearcher dSearcher = new DirectorySearcher(dEntry)) 
    { 
      dSearcher.SearcherScope = SearchScope.Subtree; 
      dSearcher.Filter = "(objectClass=organizationalUnit)"; 
      foreach(SearchResult result in dSearcher.FindAll()) 
      { 
       GetUsersFromOU(list,result.GetDirectoryEntry()); 
      } 
     } 
} 
public void GetUsersFromOU(List<MyUser> list,DirectoryEntry ou) 
{ 
    using (DirectorySearcher dSearcher = new DirectorySearcher(ou); 
    dSearcher.SearchScope = SearchScope.OneLevel; 
    dSearcher.Filter = "(&(objectClass=user)(objectCategory=person))"; 
    foreach (Search result in dSearcher.FindAll()) 
     { 
      //Do something.... update list... 
     } 
} 

Jetzt keine Ausnahmen erhalten und springt nicht zugänglich OUs. 1. Aber immer noch nicht finden können, was sind die "schlecht ou" s 2. Laufzeit ist katastrophal ...

+0

Was meinst du mit nicht zugänglich? Meinst du, existiert nicht? – w0051977

Antwort

0

Sie müssen sicherstellen, dass der Benutzer den Prozess ausführen hat die entsprechenden Berechtigungen, um die durchzuführen Sieh nach oben. Dies ist Ihr Windows-Konto in einer Desktopanwendung und das Konto, das den Anwendungspool in einer ASP.NET-Anwendung ausführt.

+0

Das ist der Punkt, ich kann nicht sicher sein, dass der Benutzer, der App läuft, die Erlaubnis für spezifische OU hat. Also muss ich "den Zugriff verweigern". Ich brauche einen Weg zu wissen, ob OU vom Benutzer zugänglich ist oder nicht. Benutzer wird von IIS definiert. –

+0

Sicher sollten Sie ein Admin-Konto verwenden, wenn Sie AD (über C#) verwenden? – w0051977

+0

Diese Frage kann Ihnen helfen: https://stackoverflow.com/questions/2810613/how-to-find-allgroups-in-activedirectory-where-the-current-user-has-writepropert – w0051977

Verwandte Themen