当前位置:  开发笔记 > 编程语言 > 正文

获取WinNT组的成员列表

如何解决《获取WinNT组的成员列表》经验,为你挑选了2个好方法。

堆栈溢出有几个与此类似的问题,但不完全相同.

我想在win xp计算机上打开或创建一个本地组,并向其添加成员,域名,本地和众所周知的帐户.我还想检查一个用户是否已经是一个成员,这样我就不会两次添加同一个帐户,并且可能会出现异常.

到目前为止,我开始将DirectoryEntry对象与WinNT://提供程序一起使用.这样可以,但是我仍然坚持如何获得一个组成员列表?

有人知道怎么做吗?或者提供比使用DirectoryEntry更好的解决方案?



1> Kepboy..:

好的,花了一段时间,搞乱了不同的解决方案,但最符合我原始问题的解决方案如下.我无法使用"标准"方法获取DirectoryEntry对象来访问本地组的成员,我可以通过使用Invoke方法调用本机对象Members方法来枚举成员的唯一方法.

using(DirectoryEntry groupEntry = new DirectoryEntry("WinNT://./Administrators,group"))
{
    foreach(object member in (IEnumerable) groupEntry.Invoke("Members"))
    {
        using(DirectoryEntry memberEntry = new DirectoryEntry(member))
        {
            Console.WriteLine(memberEntry.Path);
        }
    }
}

我还使用了类似的技术来添加和删除本地组中的成员.

希望这对其他人也有帮助.基思.

编辑 Tim:添加了VB.Net版本

Public Function MembersOfGroup(ByVal GroupName As String) As List(Of DirectoryEntry)
    Dim members As New List(Of DirectoryEntry)
    Try
        Using search As New DirectoryEntry("WinNT://./" & GroupName & ",group")
            For Each member As Object In DirectCast(search.Invoke("Members"), IEnumerable)
                Dim memberEntry As New DirectoryEntry(member)
                members.Add(memberEntry)
            Next
        End Using
    Catch ex As Exception
        MessageBox.Show(ex.ToString)
    End Try
    Return members
End Function



2> splattne..:

Microsoft .NET Framework提供了一个标准库,用于在System.DirectoryServices.dll中使用Active Directory:System.DirectoryServices命名空间.

Microsoft建议使用System.DirectoryServices命名空间中的两个主要类:DirectoryEntryDirectorySearcher.在大多数情况下,仅使用DirectorySearcher类就足够了.

更新:我在我的机器上测试它 - 它的工作原理.但也许我误解了你的问题.

以下是一篇优秀的CodeProject文章的示例:

获取属于特定AD组的用户列表

using System.DirectoryServices;

ArrayList GetADGroupUsers(string groupName)
{    
   SearchResult result;
   DirectorySearcher search = new DirectorySearcher();
   search.Filter = String.Format("(cn={0})", groupName);
   search.PropertiesToLoad.Add("member");
   result = search.FindOne();

   ArrayList userNames = new ArrayList();
   if (result != null)
   {
       for (int counter = 0; counter < 
          result.Properties["member"].Count; counter++)
       {
           string user = (string)result.Properties["member"][counter];
               userNames.Add(user);
       }
   }
   return userNames;
}

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有