获取Active Directory属性的C#方法

时间:2014-10-16 21:01:23

标签: c# active-directory

我想创建一个接受两个参数的方法;首先是用户名,第二个是要返回的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;
}

非常确定我错过了一些明显的东西,感谢每个人的时间。

2 个答案:

答案 0 :(得分:0)

如果要根据属性名称动态获取属性的值,则需要使用反射。

请看一下这个答案:Get property value from string using reflection in C#

答案 1 :(得分:0)

因为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);
}