在活动目录中获取用户所属组的C#代码

6
我本不是程序员,所以提前道歉 :) 我在使用http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C#39的代码片段,它非常有帮助。我正在使用他的方法获取用户组成员身份,并且还需要他的AttributeValuesMultiString方法。虽然没有语法错误,但是当我通过Groups("username", true)调用Groups方法时,我收到以下错误:

未经处理的异常类型'System.Runtime.InteropServices.COMException'出现在System.DirectoryServices.dll中

我进行了一些挖掘,但似乎没有真正解释为什么会出现这个错误。


请在您的问题正文中发布相关代码,这样将来对其他人有用——如果该链接失效,这个问题就毫无意义了。 - eddie_cat
1
使用PrincipalContext代替,它是更小、更易于管理的代码。这里有一个例子供您参考:http://stackoverflow.com/questions/2962539/how-to-get-a-list-of-groups-in-an-active-directory-group - MethodMan
@DJ Kraze:太好了,运行得很棒!谢谢你! - msindle
欢迎您,我很高兴您愿意从另一个角度来看待这个问题。你也因此得到了加分。 - MethodMan
1个回答

7
您可以查看 System.DirectoryServices.AccountManagement (S.DS.AM) 命名空间。在此处阅读更多相关信息: 基本上,您可以定义一个域上下文,并轻松地在 AD 中查找用户和/或组:
// set up domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
    // find a user
    UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");

    if(user != null)
    {
       // get the user's groups
       var groups = user.GetAuthorizationGroups();

       foreach(GroupPrincipal group in groups)
       {
           // do whatever you need to do with those groups
       }
    }

}

新的S.DS.AM使得在AD中玩弄用户和组变得非常简单易操作!

1
我同意S.DS.AM更简单 - 当它能正常工作的时候。但请注意,它有缺陷,而微软似乎无法或不愿修复:https://connect.microsoft.com/VisualStudio/feedbackdetail/view/748790/userprincipal-current-throws-invalidcastexception - Joe
我总是遇到AccountManagement DLL不一致的问题。这真是个噩梦。 - Cody
@marc-s 如果您想要的是不是授权组的组,请怎么办? - JsonStatham
@JsonStatham: 在user对象上,还有另一个名为user.GetGroups()的函数。也许这就是你要找的。 - Shruti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接