UserPrincipal GetUnderlyingObject: свойства отсутствуют - PullRequest
4 голосов
/ 23 февраля 2012

Я пытаюсь загрузить атрибут physicalDeliveryOfficeName из DirectoryEntry, который возвращается методом GetUnderlyingObject экземпляра UserPrincipal:

DirectoryEntry directoryEntry = principal.GetUnderlyingObject() as DirectoryEntry;

, что означает, что следующий оператор возвращает false:

directoryEntry.Properties.Contains("physicalDeliveryOfficeName");

Я знаю, что это свойство можно загрузить, добавив имя к StringCollection DirectorySearcher.PropertiesToLoad при использовании указанного DirectorySearcher.

Мои вопросы, почему неDirectoryEntry возвращенный методом GetUnderlyingObject содержит все свойства?И как я могу загрузить это свойство без использования DirectorySearcher?

Ответы [ 2 ]

6 голосов
/ 23 февраля 2012

Доступ ко всем полям для DirectoryEntry - потенциально медленная и тяжелая операция.Некоторые поля могут быть не реплицированы на все контроллеры домена, поэтому для переноса значений может потребоваться доступ к удаленному и медленному доступу к серверу глобального каталога (GC).

Как только у вас есть DirectoryEntry и вычтобы получить определенное значение, вы можете вызвать метод RefreshCache, передав ему имена нужных вам свойств.

0 голосов
/ 05 июня 2019

Использование RefreshCache :

        UserPrincipal up = ...
        using (DirectoryEntry de = up.GetUnderlyingObject() as DirectoryEntry)
        {
            foreach (var name in de.Properties.PropertyNames)
            {
                Console.WriteLine(name);
            }
            Console.WriteLine();

            // The canonicalName attribute is operational (also called constructed). 
            // Active Directory does not actually save the value, but calculates it on demand. This is probably the issue. In ADSI we use the GetInfoEx

            de.RefreshCache(new string[] { "canonicalName" });
            var canonicalName = de.Properties["canonicalName"].Value as string;
        }

PropertyNames

objectClass
cn
sn
givenName
distinguishedName
instanceType
whenCreated
whenChanged
displayName
uSNCreated
memberOf
uSNChanged
nTSecurityDescriptor
name
objectGUID
userAccountControl
badPwdCount
codePage
countryCode
badPasswordTime
lastLogoff
lastLogon
pwdLastSet
primaryGroupID
objectSid
accountExpires
logonCount
sAMAccountName
sAMAccountType
userPrincipalName
objectCategory
dSCorePropagationData
lastLogonTimestamp

canonicalName свойство отсутствует.

...