Я могу успешно выполнять запросы wmi с помощью PowerShell в качестве пользователя без повышенных прав администратора на удаленном хосте с помощью Get-WmiObject Win32_ComputerSystem -ComputerName pcname
I есть приложение, пытающееся выполнить то же самое с использованием C#:
В следующем фрагменте должен использоваться пользователь, который запускает приложение без необходимости дополнительной аутентификации:
Код: Выделить всё
CimSession session = CimSession.Create(hostname);
// A method called GetWMI(string query, string namespace) will then execute the wmi query on the remote machine
session.QueryInstances(namespace, "WQL", query)
Код: Выделить всё
DComSessionOptions dComOptions = new DComSessionOptions();
dComOptions.Impersonation = ImpersonationType.Impersonate;
var password = new SecureString();
settings.WMIPassword.ToList().ForEach(x => password.AppendChar(x));
dComOptions.AddDestinationCredentials(new CimCredential(PasswordAuthenticationMechanism.Default, settings.WMIDomain, settings.WMIUsername, password));
CimSession session = CimSession.Create(hostname, dComOptions);
// A method called GetWMI(string query, string namespace) will then execute the wmi query on the remote machine
session.QueryInstances(namespace, "WQL", query)
Может быть, есть другой способ сделать это на C# ? В результате моих исследований не удалось найти ничего, что могло бы сработать — возможно, есть какой-то способ, о котором я еще не знаю.
Мы потратили бесчисленное количество часов на исследования и отладку, но, похоже, ничего не работает. .
Для дальнейшего использования я нашел несколько старых сообщений, касающихся некоторых подобных проблем (большинству информации в Интернете о wmi более десяти лет):
- WMI — использование учетной записи без администратора для запроса сервера
- На самом деле ниже представлено мое собственное сообщение о той же проблеме — она была решена, когда мы попытались использовать права администратора. на удаленном компьютере, который будет работать, но теперь нам нужно, чтобы он работал с как можно меньшими разрешениями, например. нет администратора
Доступ запрещен при попытке собрать информацию WMI с помощью C# ASP.NET, но работает в PowerShell - https://serverfault.com/questions/28520/ Which-permissions-rights -does-a-user-need-to-wmi-access-on-remote-machines/1105113#1105113
- Ошибка отказа в доступе к WMI при запросе удаленного компьютера из ASP.NET< /li>
"get-wmiobject win32_process -computername" получает ошибку «Доступ запрещен, код 0x80070005» - Запрос Delphi Wmi на удаленном компьютере
Вот краткое изложение того, что мы попробовали:
- Мы предоставили все разрешения в «wmimgmt.msc» корневому пространству имен и применили их к «Этому пространству имен». и подпространства имен"
- Мы добавили пользователя в локальную группу "Пользователи распределенного COM".
- Мы добавили пользователя в группу "Пользователи монитора производительности" и группы «Пользователи удаленного управления».
- Мы проверили наличие проблем с брандмауэром и можем заверить, что это не должно быть проблемой.
- Мы также разрешили удаленный запуск. и разрешения на активацию

Кроме того, я нашел старое сообщение в документации Microsoft, в котором говорится, что это на самом деле невозможно (во что трудно поверить, поскольку я уже заставил это работать с помощью PowerShell): https://learn.microsoft. com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc771551(v=ws.11)?redirectedfrom=MSDN
Чтобы выполнить эту задачу на локальном компьютере, вы должны войти в систему как член локальной группы администраторов.
Чтобы выполнить эту задачу на удаленном компьютере, учетная запись, под которой вы вошли в систему, должна быть членом группы «Администраторы» этого компьютера.
Если я могу предоставить что-то еще, чтобы прояснить ситуацию, дайте мне знать.
Любые предложения будут высоко оценены — если какие-либо из моих замечаний в этом посте помогут другим люди в будущем, по крайней мере, стоит это изучить.
Подробнее здесь: https://stackoverflow.com/questions/782 ... ng-c-sharp
Мобильная версия