2015-08-20 4 views
1

У меня есть ссылка на объект пользователя, коллекция Properties этого объекта будет содержать только свойства с установленными значениями, но мне нужно проверить, существует ли свойство (по имени) для этого объект - я предполагаю, что это исходит из схемы.Как получить ВСЕ доступные свойства для DirectoryEntry

Я просмотрел deUser.SchemaEntry, но не могу найти полезную информацию об этом объекте.

Любые идеи?

DirectoryEntry deUser = new DirectoryEntry(path); 

foreach (var prop in deUser.Properties) 
{ 
    //if user.Properties["company"] is not set on this user then 
    //it will not be available here although 'company' is 
    //a property defined for the user class 
} 

//How do I get to the list of all available properties using 
//deUserSchema as below 
DirectoryEntry deUserSchema = deUser.SchemaEntry(); 
+0

Вы могли бы написать код, который вы описываете в своем вопросе. – SimonGates

ответ

0

Чтобы перечислить все свойства попробовать это:

foreach (var name in deUser.Properties.PropertyNames) 
{ 
    Console.WriteLine(name); 
} 
+0

Это будет возвращать только имена свойств, которые имеют значения, но не другие. Это моя проблема. –

0

По MSDN вы можете использовать DirectoryEntry.SchemaEntry для извлечения всех атрибутов.

Схема входа определяет список его обязательных и необязательных имен свойств. Вы можете использовать это свойство, чтобы узнать, какие свойства и методы доступны для связанного объекта.

String myADSPath = "LDAP://onecity/CN=Users,DC=onecity,DC=corp,DC=fabrikam,DC=com"; 

// Creates an Instance of DirectoryEntry. 
DirectoryEntry myDirectoryEntry=new DirectoryEntry(myADSPath, UserName, SecurelyStoredPassword); 

// Gets the SchemaEntry of the ADS object. 
DirectoryEntry mySchemaEntry = myDirectoryEntry.SchemaEntry; 

if (string.Compare(mySchemaEntry.Name,"container") == 0) 
{ 
    foreach(DirectoryEntry myChildDirectoryEntry in myDirectoryEntry.Children) 
    { 
     //...do what you need 
    } 
} 
+0

Спасибо за это. Ваш «myADSPath», похоже, указывает на какой-то контейнер «Пользователи», это путь входа в систему пользователей или путь для схемы «Пользователи»? –

+0

Если я использую фактический путь пользователя для myADSPath, тогда mySchemaEntry.Name будет «пользователем», а затем, очевидно, myDirectoryEntry не будет иметь детей. Я думаю, что есть некоторые проблемы с этим кодом ... –

+0

@A_L, я не могу проверить этот код, но попробуйте использовать «Directory Searcher». Что-то вроде этого. 'DirectorySearcher поисковик = новый DirectorySearcher (запись); search.PropertiesToLoad.Add ("*"); search.PropertiesToLoad.Add ("+"); 'и использовать' SearchResult' для прокрутки этих свойств. Дайте мне знать, если это поможет. – smr5