如何检查系统上的每个用户是否都具有 C# 中的管理员权限

本文关键字:是否 权限 管理员 用户 何检查 检查 系统 | 更新日期: 2023-09-27 17:55:26

我有一个在我的系统中创建的用户列表:

  • 管理员(默认)
  • 客人
  • 用户
  • 1(标准用户)
  • 用户
  • 2(管理员用户)

我想知道通过 WMI 在 C# 中赋予所有这些用户的权限,这怎么可能??有没有其他方法可以找到它们。即使一个用户具有此权限,它也必须退出循环

我使用以下代码:

WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
bool isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
if (isAdmin == true)
{
    current_logged_user = "Yes";
}
else
{
    current_logged_user = "No";
}

这只给了我当前登录的信息,但我需要所有用户

链接

下面的链接只是给管理员的成员链接

如何检查系统上的每个用户是否都具有 C# 中的管理员权限

您应该能够通过 WMI 返回所有用户

        string groupNameToSearchFor = "Administrators"; // can be any group,maybe better to use something like builtin.administrators
        using (PrincipalContext pc = new PrincipalContext(ContextType.Machine, null))
        {
            ManagementObjectSearcher usersSearcher = new ManagementObjectSearcher(@"SELECT * FROM Win32_UserAccount");
            ManagementObjectCollection users = usersSearcher.Get();
            foreach (ManagementObject user in users)
            {
                if ((bool)user["LocalAccount"] == true && int.Parse(user["SIDType"].ToString()) == 1)
                {
                    var userPrincipal = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, user["Name"].ToString());
                    GroupPrincipal gp = GroupPrincipal.FindByIdentity(pc, groupNameToSearchFor);
                    MessageBox.Show("Is User admin? -> " + (bool)userPrincipal.IsMemberOf(gp));
                }
            }
        }

您必须包括用于

using System.DirectoryServices.AccountManagement;
using System.Management;
并检查用户是否

真的是用户而不是其他对象(不确定我的检查是否足够)。


编辑:您可以在获得列表后投射所需的用户

        var localUsers = users.Cast<ManagementObject>().Where(
            u => (bool)u["LocalAccount"] == true &&
                 (bool)u["Disabled"] == false &&
                 (bool)u["Lockout"] == false &&
                 int.Parse(u["SIDType"].ToString()) == 1 &&
                 u["Name"].ToString() != "HomeGroupUser$");

你可以试试这个:

bool IsInGroup(string user, string group)
{
    using (var identity = new WindowsIdentity(user))
    {
        var principal = new WindowsPrincipal(identity);
        return principal.IsInRole(group);
    }
}

您可以将 IsInRole(group) 更改为 IsInRole(WindowsBuiltInRole.Administrator)

你有域名服务器吗?