C#方法获取Active Directory属性
本文关键字:Directory 属性 Active 获取 方法 | 更新日期: 2023-09-27 18:26:53
我想创建一个接受两个参数的方法;第一个是用户名,第二个是要返回的Active Directory属性的名称。。。该方法存在于一个单独的类(SharedMethods.cs
)中,如果您在该方法中本地定义属性名称,则该方法可以很好地工作,但我无法练习如何从第二个参数传递该名称。
方法如下:
public static string GetADUserProperty(string sUser, string sProperty)
{
PrincipalContext Domain = new PrincipalContext(ContextType.Domain);
UserPrincipal User = UserPrincipal.FindByIdentity(Domain, sUser);
var Property = Enum.Parse<UserPrincipal>(sProperty, true);
return User != null ? Property : null;
}
调用它的代码如下所示;
sDisplayName = SharedMethods.GetADUserProperty(sUsername, "DisplayName");
当前Enum.Parse
正在抛出以下错误:
非泛型方法"system.enum.parse(system.type,string,bool)"不能与类型参数一起使用
我可以通过删除Enum.Parse
并手动指定要检索的属性来使其工作:
public static string GetADUserProperty(string sUser, string sProperty)
{
PrincipalContext Domain = new PrincipalContext(ContextType.Domain);
UserPrincipal User = UserPrincipal.FindByIdentity(Domain, sUser);
return User != null ? User.DisplayName : null;
}
我很确定我错过了一些显而易见的东西,提前感谢大家抽出时间。
因为UserPrincipal不是枚举,所以这很难,但正如Svein所建议的,反射也是可能的。
public static string GetAdUserProperty(string sUser, string sProperty)
{
var domain = new PrincipalContext(ContextType.Domain);
var user = UserPrincipal.FindByIdentity(domain, sUser);
var property = GetPropValue(user, sProperty);
return (string) (user != null ? property : null);
}
public static object GetPropValue(object src, string propName)
{
return src.GetType().GetProperty(propName).GetValue(src, null);
}
如果您想根据属性名称动态获取属性的值,则需要使用反射。
请看一下这个答案:在C#中使用反射从字符串中获取属性值