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

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

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


Комментариев нет:

Отправить комментарий

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