如何获取本地 Windows 用户列表(仅显示在 Windows 登录屏幕中的用户)
我尝试了许多使用 Windows Principle 库和 WMI Select 命令的方法。我不断收到管理员、访客和其他一些奇怪的帐户(VUSRNEIL-DELL、$HOMEGROUPUSER、ASPNET...等)
这 3 个用户帐户都不会出现在登录屏幕上。如何区分这些用户类型?
我正在用 C# 编码
如何获取本地 Windows 用户列表(仅显示在 Windows 登录屏幕中的用户)
我尝试了许多使用 Windows Principle 库和 WMI Select 命令的方法。我不断收到管理员、访客和其他一些奇怪的帐户(VUSRNEIL-DELL、$HOMEGROUPUSER、ASPNET...等)
这 3 个用户帐户都不会出现在登录屏幕上。如何区分这些用户类型?
我正在用 C# 编码
只需System.Management
在控制台应用程序中添加对的引用并尝试以下代码:
using System;
using System.Management;
using System.Linq;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
ManagementObjectSearcher usersSearcher = new ManagementObjectSearcher(@"SELECT * FROM Win32_UserAccount");
ManagementObjectCollection users = usersSearcher.Get();
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$");
foreach (ManagementObject user in localUsers)
{
Console.WriteLine("Account Type: " + user["AccountType"].ToString());
Console.WriteLine("Caption: " + user["Caption"].ToString());
Console.WriteLine("Description: " + user["Description"].ToString());
Console.WriteLine("Disabled: " + user["Disabled"].ToString());
Console.WriteLine("Domain: " + user["Domain"].ToString());
Console.WriteLine("Full Name: " + user["FullName"].ToString());
Console.WriteLine("Local Account: " + user["LocalAccount"].ToString());
Console.WriteLine("Lockout: " + user["Lockout"].ToString());
Console.WriteLine("Name: " + user["Name"].ToString());
Console.WriteLine("Password Changeable: " + user["PasswordChangeable"].ToString());
Console.WriteLine("Password Expires: " + user["PasswordExpires"].ToString());
Console.WriteLine("Password Required: " + user["PasswordRequired"].ToString());
Console.WriteLine("SID: " + user["SID"].ToString());
Console.WriteLine("SID Type: " + user["SIDType"].ToString());
Console.WriteLine("Status: " + user["Status"].ToString());
}
Console.ReadKey();
}
}
}
如果您使用 WMI 进行查询Win32_UserAccount
,则只能显示满足以下条件的项目:
AccountType
有UF_NORMAL_ACCOUNT
标志。Disabled
是false
。Lockout
是false
。LocalAccount
是true
。SIDType
是SidTypeUser
。如果你不能使用 WMI(或者你不想使用它)那么你必须做更多的工作,基本上你必须使用NetGroupGetUsers函数来枚举所有用户。有关示例,请参阅CodeProject 上的这篇文章。
如果您想使用包装解决方案,NuGet 有“Continuous.Management”包 - 这是一个开源项目:https ://github.com/jarzynam/continuous
这将为您提供所有用户帐户、其域、全名和 SID 的列表。
wmic useraccount get domain,name,sid