wmi олицетворение на удаленном компьютере как текущий пользователь - PullRequest
0 голосов
/ 30 апреля 2018

Я создал приложение MVC. Это интранет-сайт. пользователи входят в систему с аутентификацией Windows. После определенного прогресса мне нужно подключиться с веб-сервера к клиентскому компьютеру, чтобы вызвать некоторую функцию wmi. Все работает, я могу подключить их wmi и инициировать действия с моей учетной записью службы (которая является администратором на клиентском компьютере)

Моя проблема - это контекст wmi, к которому я подключаюсь, всегда контекст моей учетной записи администратора. Это не то, что я хочу, потому что мне нужно запустить это как текущий пользователь на удаленной машине.

Итак. Мне нужно войти на удаленный компьютер с моей учетной записью администратора и запустить функцию в качестве текущей учетной записи пользователя. Является ли это возможным ? или это невозможно из-за безопасности окон.

Вот так я подключаюсь к удаленному компьютеру

    ManagementScope wmiScope = new ManagementScope(@"\\" + remoteHost + wmiNameSpace);
wmiScope.Options.EnablePrivileges = true;
wmiScope.Options.Impersonation = ImpersonationLevel.Impersonate;
ManagementPath wmiClass = new ManagementPath(wmiClassName);
ManagementClass wmiObject = new ManagementClass(wmiScope, wmiClass, null);
return wmiObject;

и вот как я запускаю функцию

  ManagementClass wmiConnection = clientConnection.ConnectRemoteWMI(remote, @"\ROOT\ccm\ClientSDK", "CCM_ClientUtilities");
            ManagementBaseObject parameters = wmiConnection.GetMethodParameters(policyType);
            ManagementBaseObject result = wmiConnection.InvokeMethod(policyType, parameters, null); 

1 Ответ

0 голосов
/ 30 апреля 2018

Это не прямой ответ. Тем не менее, вы должны иметь всю необходимую информацию здесь

Удаленное подключение к WMI с помощью C #

Короче вам нужно будет создать систему ManagementScope

Примечание System.Management было исходным пространством имен .NET, используемым для доступа WMI; однако API в этом пространстве имен, как правило, медленнее и делают не в масштабе, а по сравнению с их более современными Microsoft.Management.Infrastructure аналоги.

Однако

  1. Создайте объект ManagementScope, используя имя компьютера и путь WMI, и подключитесь к своей цели с помощью вызова ManagementScope.Connect().

  2. Если вы подключаетесь к удаленному компьютеру в другом домене или используете другое имя пользователя и пароль, то вы должны использовать объект ConnectionOptions при вызове ManagementScope.

ConnectionOptions содержит свойства для описания Аутентификация, олицетворение, имя пользователя, пароль и др. варианты подключения.

ConnectionOptions options = new ConnectionOptions();
options.Impersonation = System.Management.ImpersonationLevel.Impersonate;

// options takes more arguments, you need to read up on what you want

ManagementScope scope = new ManagementScope("\\\\FullComputerName\\root\\cimv2", options);
scope.Connect();

ManagementPath path = new ManagementPath("Win32_NetworkAdapterConfiguration");
ObjectGetOptions o = new ObjectGetOptions(null, System.TimeSpan.MaxValue, true);
ManagementClass objMC = new ManagementClass(scope, path, o);
...

Вообще говоря, рекомендуется установить свое олицетворение уровень для олицетворения, если явно не требуется иначе


Дополнительное чтение

Удаленное подключение к WMI с помощью C #

ManagementScope Class

ConnectionOptions Класс

Класс ObjectGetOptions

ManagementPath Class

Класс управления классом

Отказ от ответственности : вам придется прочитать об этих темах и решить, что вам нужно в вашей ситуации.

...