Зачастую необходимо быстро проверить права пользователя, как на локальной, так и на удаленной ПЭВМ, есть много способов, это сделать. Стандартный, это проверка нахождения учетной записи в группе «Администраторы», но для этого приходится выполнить много манипуляций, особенно если, это удаленный компьютер. Рассмотрим пример проверки нахождения заданной учетной записи в группе «Администраторы» используя 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) { }
Ссылка для скачивания примера: Яндекс.Диск
Комментариев нет:
Отправить комментарий
Большая просьба, не писать в комментариях всякую ерунду не по теме!