Active Directory Schema Class Attribut (maycontain) auslesen

StehtimSchilf

Erfahrenes Mitglied
Hi Forum

ich habe mein AD mit einem ldif-file erweitert:
- Ich habe eine neue Schema Class 'mySchemaClass' hinzugefügt
- Und für die Schema Class vier neue Attribute Attr1, Attr2, Attr3, Attr4 hinzugefügt.

Alles funktioniert wunderbar.

Wenn ich nun mit ADSIEdit.exe meine Schema Class anschaue, dann sehe ich dort das Attribute: "mayContain". welches die Werte Attr1, Attr2, Attr3, Attr4 enthält.

Alles wie gewünscht.

Aber wie zum Henker komme ich mit C# an dieses Attribut "mayContain" ran?

Das Attribute gibt es nicht als Eigenschaft von ActiveDirectorySchema noch ist es in den Eigenschaften OptionalProperties, MandatoryProperties gelistet.


Ich komme ran, wenn ich einen DirectorySearcher wie folgt ausführe:

Code:
         DirectoryEntry dir = new DirectoryEntry("LDAP://1.2.3.4/cn=schema,CN=Configuration,DC=example,DC=com");
         DirectorySearcher searcher = new DirectorySearcher(dir);
         searcher.Filter = "(cn=mySchemaClass)";
         SearchResult searchResult = searcher.FindOne();
         ResultPropertyCollection prop = searchResult.Properties;

         foreach (string propName in prop.PropertyNames) {
            if (propName.Equals("maycontain", StringComparison.InvariantCultureIgnoreCase)) {
               log.Text += "\r\n" + propName + ": ";
               foreach (string value in prop[propName]) {
                  log.Text += "\r\n" + value+ ": ";
               }
            }
         }

Aber das kann doch nicht sein, dass ich das so mühsam machen muss? Ich meine, an die Schema Class komme ich ja ganz einfach mit:

Code:
ActiveDirectorySchemaClass.FindByName(getContext(), "mySchemaClass");


Ideen?
Cheerioh
SiS
 
Na ja, mühsam kann man das nicht wirklich nennen, aber das ist sicher kürzer:
C#:
            System.DirectoryServices.ResultPropertyCollection res = searchResult.Properties;
            var props = res["mayContain"]; // möglicherweise ist ein res.Contains("mayContain") besser, ich weiss nicht, was operator this macht, wenn der Schlüssel nicht drin ist. Da in der Doku nichts von einer Exception steht vermute ich, dass eine leere Collection zurückgegeben wird.
            if (props.Count == 0)
                throw new Exception("mayContain is not contained!");

            foreach (string s in props)
                Console.WriteLine(s);
 

Neue Beiträge

Zurück