Домой C# Проверка прав администратора у пользователя на удаленной ПЭВМ: Справочник по C#

Проверка прав администратора у пользователя на удаленной ПЭВМ: Справочник по C#

572
0


      Зачастую необходимо быстро проверить права пользователя, как на локальной, так и на удаленной ПЭВМ, есть много способов, это сделать. Стандартный, это проверка нахождения учетной записи в группе «Администраторы», но для этого приходится выполнить много манипуляций, особенно если, это удаленный компьютер. Рассмотрим пример проверки нахождения заданной учетной записи в группе «Администраторы» используя Windows Management Instrumentation (WMI) и его класс Win32_Group
      Создайте проект 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}rootCIMV2", 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)
{  }

Ссылка для скачивания примера: Яндекс.Диск

ЧИТАТЬ ТАКЖЕ:  MSN Weather Получение погоды с MSN погода: Справочник по C#

Проверка прав администратора у пользователя на удаленной ПЭВМ: Справочник по C#

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь