从AD获取用户所在部门

Ale*_*xis 0 c# active-directory asp.net-core

在 ASP.net CORE MVC 网站中使用 Active Directory,我可以获得许多用户属性,如 diplayName、emailAdress...,但我找不到用户的部门。
获取用户信息

UserPrincipal user = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain), Environment.UserName);
Run Code Online (Sandbox Code Playgroud)

但用户没有属性“部门”。

我尝试过:

DirectoryEntry directoryEntry = user.GetUnderlyingObject() as DirectoryEntry;
        var property = "department";
        if (directoryEntry.Properties.Contains(property))
        {
            var dep = directoryEntry.Properties[property].Value.ToString();
        }
Run Code Online (Sandbox Code Playgroud)

也没有部门财产。

编辑

以下是可用属性的列表:"objectClass, cn, sn, title, description, userCertificate, givenName, distinguishedName, instanceType, whenCreated, whenChanged, displayName, uSNCreated, memberOf, uSNChanged, proxyAddresses, homeMDB, mDBUseDefaults, mailNickname, name, objectGUID, userAccountControl, badPwdCount, codePage, countryCode, badPasswordTime, lastLogon, pwdLastSet, primaryGroupID, objectSid, accountExpires, logonCount, sAMAccountName, sAMAccountType, showInAddressBook, legacyExchangeDN, userPrincipalName, objectCategory, dSCorePropagationData, lastLogonTimestamp, textEncodedORAddress, mail and Lot of msExchange"

Mat*_*son 5

AccountManagement这对我有用(使用和 的混合DirectoryServices):

var ad = new PrincipalContext(ContextType.Domain, DOMAIN);
var u  = new UserPrincipal(ad) {SamAccountName = Environment.UserName};

using (var search = new PrincipalSearcher(u))
{
    var user = (UserPrincipal) search.FindOne();

    DirectoryEntry dirEntry = (DirectoryEntry)user.GetUnderlyingObject();
    string dept = dirEntry.Properties["Department"].Value.ToString();
    Console.WriteLine(dept);
}
Run Code Online (Sandbox Code Playgroud)

这需要满足以下条件using

using System;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
Run Code Online (Sandbox Code Playgroud)