Вопрос по c#, userprincipal, wmi, user-accounts – Как я могу получить список локальных пользователей Windows (только те пользователи, которые отображаются на экране входа в Windows)
Как я могу получить список локальных пользователей Windows (только те пользователи, которые отображаются на экране входа в Windows)
Я перепробовал много методов, используя библиотеку принципов Windows WMI Выберите команды. Я продолжаю получать Администратор, Гость и некоторые другие странные аккаунты (VUSRNEIL-DELL, $ HOMEGROUPUSER, ASPNET ... и т. д.)
Ни одна из этих трех учетных записей не отображается на экране входа в систему. Как я могу различать эти типы пользователей?
Я кодирую в C #
Win32_UserAccount
Вы можете отображать только те элементы, которые соответствуют следующим условиям:
AccountType
имеетUF_NORMAL_ACCOUNT
флаг.ИмуществоDisabled
является .false
ИмуществоLockout
является .false
ИмуществоLocalAccount
является .true
ИмуществоSIDType
является .SidTypeUser
Если ты можешь't использовать WMI (или вы не хотите его использовать), тогда вам придется проделать немного больше работы, в основном вы должны использоватьNetGroupGetUsers функция для перечисления всех пользователей. Увидетьэта статья на CodeProject для примера.
Просто добавьте ссылку на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();
}
}
}
</managementobject>
Если вы хотите использовать завернутое решение, NuGet имеетContinuous.Management» пакет - это проект с открытым исходным кодом:https://github.com/jarzynam/continuous