我试图从AD中获取一个特定用户的部门属性。但它说 DirectoryEntry does not contain a definition for 'Properties'
. 在stackoverflow上有很多例子都使用了下面的代码。为什么我不能用,是不是我实现错了?我使用的是.net core 3.1。
var user = UserPrincipal.FindByIdentity(ctx, domainUser.DistinguishedName);
DirectoryEntry dirEntry = (DirectoryEntry)user.GetUnderlyingObject();
string dept = dirEntry.Properties["Department"].Value.ToString();
我使用了以下(相关的)导入。
using System.DirectoryServices.AccountManagement;
using System.Reflection.PortableExecutable;
我自己修了一下。原来你必须安装 System.DirectoryServices
在nuget中。安装后,我做。
using System.DirectoryServices;
我做了: System.Reflection.PortableExecutable
导入是错误的...
如你所想,这是因为 System.Reflection.PortableExecutable
有一个定义 DirectoryEntry
当你真正想使用 System.DirectoryServices.DirectoryEntry
.
但另一个问题是: department
属性是不需要的。如果它是空的。Value
将是 null
和呼吁 ToString()
会抛出一个异常。所以,你最好是投向一个 string
而不是。
var dept = (string) dirEntry.Properties["department"].Value;
这样一来,如果... department
没有值,您的 dept
变量最终会变成 null
而不是抛出一个异常。