【问题标题】:Query Local Administrator Group查询本地管理员组
【发布时间】:2013-01-13 17:03:07
【问题描述】:

所以,我有点卡在这里......

我正在编写一个程序,它应该能够列出 MS Windows Server 2008 R2 上本地管理员组中的所有用户。

这里的问题是我只被允许使用 .NET 2.0 - 所以我不能使用 GroupPrincipal 类...这会让这变得非常容易。

任何指针都会被应用!

干杯!

【问题讨论】:

    标签: c# .net-2.0 windows-server-2008


    【解决方案1】:

    天哪!

    不知道我到底在想什么——太简单了!

    对 Masoud Tabatabaei 的所有信任 - 在以下代码中找到以下代码: http://csharptuning.blogspot.se/2007/09/how-to-get-list-of-windows-user-in-c.html

    DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
    DirectoryEntry admGroup = localMachine.Children.Find("administrators","group");
    object members = admGroup.Invoke("members", null);
    foreach (object groupMember in (IEnumerable)members)
    {
        DirectoryEntry member = new DirectoryEntry(groupMember);
        lstUsers.Items.Add(member.Name);
    }
    

    【讨论】:

    【解决方案2】:

    您尝试过 WMI 吗?

    例如

    ManagementObjectSearcher   search = new ManagementObjectSearcher(@"SELECT * FROM Win32_UserAccount where LocalAccount = true");
    ManagementObjectCollection userList = search.Get();
    
    foreach (ManagementObject user in userList)
    {
        Console.WriteLine("User name: {0}, Full Name: {1}", 
            user["Name"].ToString(), user["FullName"].ToString());
    }
    

    将为您提供本地 SAM 中的用户列表。您可以向查询添加其他属性并优化您的列表。

    不要忘记添加对 System.Management.dll 的引用

    【讨论】:

    • 谢谢,是的,我尝试了类似的方法 - 我只是发现使用 WMI 有点混乱,试图将 Win32_UserAccount 与 Win32_Group 相关联!
    【解决方案3】:

    如果您仍在寻找答案,请点击此处:

    如果你想获得管理员组,你可以使用这个代码:

    public static DirectoryEntry GetLocalAdminstratorGroup()
    {
        using (var WindowsActiveDirectory = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"))
        {
            return WindowsActiveDirectory.Children.Find(GetLocalizedAdministratorGroupName(), "group");
        }
    }
    
    //Localized == Language Independent
    public static string GetLocalizedAdministratorGroupName()
    {
        //For English Windows version, this equals "BUILTIN\Administrators".
        var adminGroupName = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null).Translate(typeof(NTAccount)).Value;
    
        //Remove the "BUILTIN\" part, get the local name of the group
        return adminGroupName.Split('\\')[1];
    }
    

    如果你还想枚举它(比如你需要一个用户名),你可以这样做,使用之前的方法:

    object members = AdminGroup.Invoke("members", null);
    foreach (object groupMember in (IEnumerable)members)
    {
        DirectoryEntry member = new DirectoryEntry(groupMember);
        Console.WriteLine(member.Name);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 2018-12-08
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多