如何获取列表本地Windows用户(仅显示在Windows登录屏幕中的用户)

Nei*_*son 9 c# wmi user-accounts userprincipal

如何获取本地Windows用户列表(仅显示在Windows登录屏幕中的用户)

我尝试了很多使用Windows Principle库和WMI Select命令的方法.我一直得到管理员,访客和其他一些奇怪的帐户(VUSRNEIL-DELL,$ HOMEGROUPUSER,ASPNET等等)

登录屏幕上不会显示这3个用户帐户.如何区分这些用户类型?

我在C#中编码

Len*_*rri 12

只需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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Adr*_*tti 5

如果您使用WMI查询Win32_UserAccount,则只能显示符合以下条件的项目:

  • 财产AccountTypeUF_NORMAL_ACCOUNT旗帜.
  • 财产Disabledfalse.
  • 财产Lockoutfalse.
  • 财产LocalAccounttrue.
  • 财产SIDTypeSidTypeUser.

如果您不能使用WMI(或者您不想使用它),那么您必须做更多的工作,基本上您必须使用NetGroupGetUsers函数来枚举所有用户.有关示例,请参阅CodeProject上的这篇文章.