Зачастую необходимо быстро проверить права пользователя, как на локальной, так и на удаленной ПЭВМ, есть много способов, это сделать. Стандартный, это проверка нахождения учетной записи в группе «Администраторы», но для этого приходится выполнить много манипуляций, особенно если, это удаленный компьютер. Рассмотрим пример проверки нахождения заданной учетной записи в группе «Администраторы» используя Windows Management Instrumentation (WMI) и его класс Win32_Group.
Создайте проект Windows Form в Microsoft Visual Studio и добавьте на главную форму следующие компоненты:
Сделайте двойной клик левой клавишей мыши по элементу управления «button1» и перейдите в автоматически созданный метод «button1_Click». Добавьте в него приведенный ниже листинг кода:
Если вы хотите получить просто список пользователей или групп находящихся в группе «Администраторы», необходимо заменить приведенный ниже листинг:
Создайте проект Windows Form в Microsoft Visual Studio и добавьте на главную форму следующие компоненты:
- textBox1 – Логин для авторизации на удаленной ПЭВМ;
- textBox2 – Пароль для авторизации на удаленной ПЭВМ;
- textBox3 – Имя или IP компьютера;
- textBox4- Учетная запись, которую будет искать программа в группе «Администраторы»;
- button1 – Кнопка запуска проверки прав администраторы.
Сделайте двойной клик левой клавишей мыши по элементу управления «button1» и перейдите в автоматически созданный метод «button1_Click». Добавьте в него приведенный ниже листинг кода:
//Задаем все параметры, обязательные для установки WMI-подключения.
ConnectionOptions options = new ConnectionOptions();
string pvm = textBox3.Text;
#region проверка, к какой ПЭВМ выполняем подключение, локальной или в сети
if (pvm == Environment.MachineName)
{
pvm = ".";
}
else
{
options.Username = textBox1.Text;
options.Password = textBox2.Text;
options.Authority = "ntlmdomain:";//Если ПЭВМ в домене, то указываем его.
options.EnablePrivileges = true;
options.Impersonation = ImpersonationLevel.Impersonate;
}
#endregion
//Устанавливаем подключение к ПЭВМ
ManagementScope scope = new ManagementScope(string.Format(@"\\{0}\root\CIMV2", pvm), options);
scope.Connect();
//Создаем строку поиска пользователя в группе администратора и
//указываем в качестве домена, компьютер на который выполнили подключение
StringBuilder sBuilder = new StringBuilder("GroupComponent=");
sBuilder.Append('"');
sBuilder.Append("Win32_Group.Domain=");
sBuilder.Append("'");
sBuilder.Append(pvm);
sBuilder.Append("'");
sBuilder.Append(",Name=");
sBuilder.Append("'");
sBuilder.Append("Администраторы");
sBuilder.Append("'");
sBuilder.Append('"');
//Создаем WQL запрос
SelectQuery sQuery = new SelectQuery("Win32_GroupUser", sBuilder.ToString());
//Выполняем поиск заданного пользователя в группе Администраторы
try
{
ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(scope, sQuery);
foreach (ManagementObject mObject in mSearcher.Get())
{
ManagementPath path = new ManagementPath(mObject["PartComponent"].ToString());
if (path.ClassName == "Win32_UserAccount")
{
String[] names = path.RelativePath.Split(',');
if ((names[1].Substring(names[1].IndexOf("=") + 1).Replace('"',
' ').Trim().ToLower()) == textBox4.Text.Trim().ToLower())
{
MessageBox.Show("Пользователь обладает правами администратора!",
"Проверка прав пользователя",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
}
}
catch (Exception)
{ } Запустите ваш проект, нажав на клавишу «F5». Заполните данные вашей формы и нажмите на единственную кнопку вашей формы. В случае если вы все сделали правильно, вы увидите сообщение, информирующее вас о состоянии прав для введенного вами пользователя. Например, для пользователя обладающими правами администратора:Если вы хотите получить просто список пользователей или групп находящихся в группе «Администраторы», необходимо заменить приведенный ниже листинг:
//Выполняем поиск заданного пользователя в группе Администраторы
try
{
ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(scope, sQuery);
foreach (ManagementObject mObject in mSearcher.Get())
{
ManagementPath path = new ManagementPath(mObject["PartComponent"].ToString());
if (path.ClassName == "Win32_UserAccount")
{
String[] names = path.RelativePath.Split(',');
if ((names[1].Substring(names[1].IndexOf("=") + 1).Replace('"',
' ').Trim().ToLower()) == textBox4.Text.Trim().ToLower())
{
MessageBox.Show("Пользователь обладает правами администратора!",
"Проверка прав пользователя",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
}
}
catch (Exception)
{ }На:string User = string.Empty;
//Выполняем поиск заданного пользователя в группе Администраторы
try
{
ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(scope, sQuery);
foreach (ManagementObject mObject in mSearcher.Get())
{
ManagementPath path = new ManagementPath(mObject["PartComponent"].ToString());
if (path.ClassName == "Win32_UserAccount")
{
String[] names = path.RelativePath.Split(',');
User +=(names[1].Substring(names[1].IndexOf("=") + 1).Replace('"',
' ').Trim().ToLower() + Environment.NewLine);
}
}
MessageBox.Show(User);
}
catch (Exception)
{ }Ссылка для скачивания примера: Яндекс.Диск





Комментариев нет:
Отправить комментарий
Большая просьба, не писать в комментариях всякую ерунду не по теме!