Подключение к WMI на удаленном компьютере

WMI можно использовать для управления данными WMI и доступа к ней на удаленных компьютерах. На удаленные подключения в WMI влияют параметры брандмауэра Windows и DCOM. Контроль учетных записей (UAC) также может потребовать изменения некоторых параметров. Однако после исправления параметров вызов удаленной системы очень похож на локальный вызов WMI. Однако вы можете сделать ее более сложной, используя разные учетные данные, альтернативные протоколы проверки подлинности и другие функции безопасности.

Настройка компьютера для удаленного подключения

Прежде чем получить доступ к удаленной системе с помощью инструментария WMI, может потребоваться проверка некоторые параметры безопасности, чтобы убедиться, что у вас есть доступ. В частности:

Кроме того, в некоторых случаях может потребоваться запустить WMI через фиксированный порт. Для этого также потребуется изменить параметры. Дополнительные сведения см. в разделе Настройка фиксированного порта для WMI.

Подключение к удаленному компьютеру

По сути, подключение к удаленной системе с помощью WMI состоит в том, чтобы убедиться, что у вас есть соответствующие разрешения для доступа к системе и что подключение правильно настроено. После создания этих двух элементов само соединение становится относительно простым. Например, если вы используете учетные данные безопасности по умолчанию, вы можете получить доступ к WMI в удаленной системе с помощью следующего кода:

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

Используйте параметр -ComputerName , общий для большинства командлетов WMI, например Get-WmiObject.

$strComputer = "Computer_B"
$colSettings = Get-WmiObject Win32_OperatingSystem -ComputerName $strComputer

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

Используйте моникер, содержащий имя удаленной системы в вызове GetObject.

strComputer = "Computer_B"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")

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

Для текущей версии управляемого интерфейса WMI (Microsoft.Management.Infrastructure) используйте объект CimSession для представления подключения к удаленному узлу.

using Microsoft.Management.Infrastructure;
...
string Namespace = @"root\cimv2";
string OSQuery = "SELECT * FROM Win32_OperatingSystem";
CimSession mySession = CimSession.Create("Computer_B");
IEnumerable<CimInstance> queryInstance = mySession.QueryInstances(Namespace, "WQL", OSQuery);

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

Для версии 1 управляемого интерфейса WMI (System.Management) используйте объект ManagementScope , чтобы представить подключение к удаленному узлу.

using System.Management;
...
ManagementScope scope = new ManagementScope("\\\\Computer_B\\root\\cimv2");
scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

Пример. Получение данных WMI с удаленного компьютера (C++)

Используйте метод IWbemLocator::ConnectServer , чтобы указать имя удаленного компьютера в параметре strNetworkResource .

    hres = pLoc->ConnectServer(
        _bstr_t(L"\\\\COMPUTER_B\\root\\cimv2"),
        _bstr_t(useToken?NULL:pszName),    // User name
        _bstr_t(useToken?NULL:pszPwd),     // User password
        NULL,                              // Locale             
        NULL,                              // Security flags
        _bstr_t(useNTLM?NULL:pszAuthority),// Authority        
        NULL,                              // Context object 
        &pSvc                              // IWbemServices proxy
        );

Предыдущие примеры кода, возможно, являются самым простым удаленным подключением, которые можно выполнить с помощью WMI. В частности, в примерах предполагается следующее:

  • Вы являетесь администратором на удаленном компьютере. Из-за контроля учетных записей пользователей учетная запись в удаленной системе должна быть учетной записью домена в группе Администраторы. Дополнительные сведения см. в разделе Контроль учетных записей пользователей и WMI.
  • Пароль на текущем локальном компьютере не является пустым. По сути, это требование безопасности Windows, которое необходимо выполнить в системе с паролем.
  • Локальный и удаленный компьютеры находятся в одном домене. Если необходимо пересечь границы предметной области, необходимо предоставить дополнительные сведения или использовать немного другую модель программирования.
  • Для доступа к удаленному компьютеру используется собственная учетная запись. Если вы пытаетесь получить доступ к другой учетной записи, необходимо указать дополнительные учетные данные. (Обратите внимание, что попытка локального доступа к WMI с учетными данными, отличными от текущей учетной записи, не разрешена.)
  • Оба компьютера работают под управлением IPv6. WMI поддерживает подключения к компьютерам под управлением IPv6. Однако как локальный компьютер, так и "Computer_B" должны работать под управлением IPv6. Любой компьютер также может работать под управлением IPv4. Дополнительные сведения см. в статье Поддержка IPv6 и IPv4 в WMI.
  • Скрипту не требуется делегировать, то есть ему не требуется доступ к дополнительным удаленным компьютерам через целевой удаленный компьютер. Дополнительные сведения см. в разделе Делегирование с помощью WMI.
  • Вы пытаетесь выполнить определенный вызов, а не создавать удаленный процесс. Дополнительные сведения см. в статье Удаленное создание процессов с помощью WMI.

Учитывая эти ограничения, удаленный вызов WMI очень похож на локальный вызов WMI. Единственное отличие заключается в том, что необходимо указать имя удаленной системы. Однако вы можете изменить многие из этих функций: с помощью разных учетных данных, маршрутизации звонка через сторонний компьютер или доступа к другому домену.