C# 使用windows原则获取用户帐户组
我有一个简短的问题 实际上,我在windows环境10.0.16299.0版和UWP中工作。我想做的是获取有关用户帐户信息、其名称的信息,如果是其管理员或用户,代码如下所示:C# 使用windows原则获取用户帐户组,c#,C#,我有一个简短的问题 实际上,我在windows环境10.0.16299.0版和UWP中工作。我想做的是获取有关用户帐户信息、其名称的信息,如果是其管理员或用户,代码如下所示: public class Priciple { public string UserName { get; set; } public string AccountDomainSid { get; set; } public List<string> Claims { get; se
public class Priciple
{
public string UserName { get; set; }
public string AccountDomainSid { get; set; }
public List<string> Claims { get; set; }
public string AdminRole { get; set; }
public string UserRole { get; set; }
public void GetUserInfo()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
UserName = identity.Name;
AccountDomainSid = identity.User?.AccountDomainSid.Value ?? "Unknown";
Claims = identity.Claims.Select(claim => claim.Value).ToList();
AdminRole = $"Admin role {principal.IsInRole(@"BUILTIN\Administrators")}";
UserRole = $"User role {principal.IsInRole(@"BUILTIN\Users")}";
}
}
公共类原则
{
公共字符串用户名{get;set;}
公共字符串AccountDomainSid{get;set;}
公共列表声明{get;set;}
公共字符串AdminRole{get;set;}
公共字符串用户角色{get;set;}
public void GetUserInfo()
{
WindowsIdentity=WindowsIdentity.GetCurrent();
WindowsPrincipal=新的WindowsPrincipal(标识);
UserName=identity.Name;
AccountDomainSid=identity.User?.AccountDomainSid.Value???“未知”;
Claims=identity.Claims.Select(claim=>claim.Value.ToList();
AdminRole=$“管理员角色{principal.IsInRole(@“内置\Administrators”)}”;
UserRole=$“用户角色{principal.IsInRole(@“内置\Users”)}”;
}
}
现在,我得到了SID、用户名和其他内容的列表,所以类的简单显示如下所示:
用户名-DESKTOP-ISLHFK5\管理员域Sid-S-1-5-21-134928182-1594639943-345264679
本地帐户和组Sid:
DESKTOP-ISLHFK5\管理员
S-1-5-21-134928182-1594639943-345264679-500-据我所知,这是管理员帐户
S-1-5-21-134928182-1594639943-345264679-513
S-1-5-21-134928182-1594639943-345264679-513
S-1-1-0
S-1-5-114
S-1-5-21-134928182-1594639943-345264679-1002
S-1-5-21-134928182-1594639943-345264679-1051
S-1-5-32-544
S-1-5-32-562
S-1-5-32-559
S-1-5-32-545
S-1-5-14
S-1-5-4
S-1-5-11
S-1-5-15
S-1-5-113
S-1-2-0
S-1-5-64-10
但当我检查管理员时,我得到:
权限信息管理员角色False
现在知道为什么了吗???你会尝试使用
WindowsBuiltInRole.Administrator
var AdminRole = $"Admin role {principal.IsInRole(WindowsBuiltInRole.Administrator)}";
是否尝试使用
WindowsBuiltInRole.Administrator
var AdminRole = $"Admin role {principal.IsInRole(WindowsBuiltInRole.Administrator)}";
以下文件对此进行了解释: 在Windows Vista中,用户帐户控制(UAC)决定用户的权限。如果您是内置Administrators组的成员,则会为您分配两个运行时访问令牌:标准用户访问令牌和管理员访问令牌 默认情况下,您处于标准用户角色。当你试图 执行需要管理权限的任务,您可以 使用“同意”对话框动态提升您的角色。这个 执行IsInRole方法的代码不显示同意 对话框。如果您是标准用户,则代码返回false 角色,即使您在内置Administrators组中 您可以在执行代码之前通过右键单击提升权限 应用程序图标,指示您要作为应用程序运行 管理员
请使用myPrincipal.IsInRole(WindowsBuiltInRole.Administrator)重试,以检查该帐户是否为管理员,文档中对此进行了说明: 在Windows Vista中,用户帐户控制(UAC)决定用户的权限。如果您是内置Administrators组的成员,则会为您分配两个运行时访问令牌:标准用户访问令牌和管理员访问令牌 默认情况下,您处于标准用户角色。当你试图 执行需要管理权限的任务,您可以 使用“同意”对话框动态提升您的角色。这个 执行IsInRole方法的代码不显示同意 对话框。如果您是标准用户,则代码返回false 角色,即使您在内置Administrators组中 您可以在执行代码之前通过右键单击提升权限 应用程序图标,指示您要作为应用程序运行 管理员 请使用
myPrincipal.IsInRole(WindowsBuiltInRole.Administrator)
重试,以检查该帐户是否为管理员