2015-04-24 3 views
1

Недавно я работал над небольшой частью очень большого приложения. В этой части мне нужно получить данные из активных свойств каталога, используя класс UserPrincipal.UserPrincipal properties return null

Это прекрасно работает для некоторых свойств, i.e GivenName, Surname. Но когда я пытаюсь получить значения свойств типа «имя», я получаю нулевые значения, и я очень уверен, что они заполнены значениями, а не нулями.

Сначала я подумал, что это вопрос разрешения, поэтому я попросил администратора предоставить все разрешения на чтение для моей учетной записи, но он все же не смог прочитать все свойства. НО я могу прочитать их все с помощью приложения ActiveDirectoryExplorer.

Так что мой вопрос; кто-нибудь знает, в чем причина этого, когда это не проблема разрешения.

Заранее спасибо

+0

Отладить его. Когда вы получите некоторую правку, проверьте все свойства UserPrincipal. Если какое-либо свойство заполнено, например, с именем GivenName или чем-то, чем было прочитано, поэтому, если какое-либо свойство имеет значение null, то это действительно nul – MajkeloDev

ответ

0

Выполните приведенный ниже код и посмотреть, что в вашем AD все имущество доступно. Существует изменения, которые вы могли бы иметь орфографическую ошибку ключ или ключ не существует в вашем AD

DirectorySearcher mySearcher = new System.DirectoryServices.DirectorySearcher(entry); 

      foreach (System.DirectoryServices.SearchResult resEnt in mySearcher.FindAll()) 
      { 
       try 
       { 
        foreach (string property in resEnt.Properties.PropertyNames) 
        { 
         string value = resEnt.Properties[property][0].ToString(); 

         Console.WriteLine(property + ":" + value); 
        } 
       } 
       catch (Exception) 
       { } 
      } 

Список свойств в моем Windows Server 2008 R2 AD

objectClass=top;person;organizationalPerson;user 
cn=x1 
sn=LastName 
c=PL 
l=City 
st=State 
title=Job title 
description=Description 
postalCode=Zip 
postOfficeBox=POBox 
physicalDeliveryOfficeName=Office 
telephoneNumber=123456779 
givenName=FirstName 
distinguishedName=CN=x1,CN=Users,DC=helpdesk,DC=wat,DC=edu 
instanceType=4 
whenCreated=2012-11-27 21:37:37 
whenChanged=2012-12-11 21:33:51 
displayName=DisplayName 
uSNCreated=System.__ComObject 
uSNChanged=System.__ComObject 
co=Poland 
department=Department 
company=Company 
streetAddress=Street 
name=x1 
objectGUID=System.Byte[] 
userAccountControl=66048 
badPwdCount=0 
codePage=0 
countryCode=616 
badPasswordTime=System.__ComObject 
lastLogoff=System.__ComObject 
lastLogon=System.__ComObject 
pwdLastSet=System.__ComObject 
primaryGroupID=513 
objectSid=System.Byte[] 
accountExpires=System.__ComObject 
logonCount=1 
sAMAccountName=x1 
sAMAccountType=805306368 
[email protected] 
objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=helpdesk,DC=wat,DC=edu 
dSCorePropagationData=1601-01-01 00:00:00 
lastLogonTimestamp=System.__ComObject 
[email protected] 
homePhone=1236456654654659 
mobile=800800800 
nTSecurityDescriptor=System.__ComObject 
+0

. Я попробую и дам вам знать, как это работает. – Basvo

+0

Действительно странно, при использовании вашего метода я фактически получаю каждое значение свойства. Но при использовании UserPrincipal я не получу ничего, кроме SurName и GivenName. Спасибо хоть! – Basvo

+0

можете ли вы разместить свой код, пожалуйста – Rad

1

У меня была такая же проблема. Мне не удалось выяснить, почему они всегда равны нулю. Мое обходное решение заключалось в том, чтобы включить UserPrincipal в DirectoryEntry. Затем вы можете вызвать свойства по имени. Не идеальный, но он работает.

Обратите внимание, что фактические отсутствующие (нулевые) значения в этих свойствах вызовут исключение, поэтому его необходимо обработать.

 //UserPrincipal user... 
    DirectoryEntry d = (DirectoryEntry)user.GetUnderlyingObject(); 
    Console.WriteLine(d.Properties["GivenName"].Value.ToString() + d.Properties["sn"].Value.ToString());