Поделиться через


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

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

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

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

  • Windows содержит ряд функций безопасности, которые могут блокировать доступ к сценариям в удаленных системах. Таким образом, перед вызовом WMI может потребоваться изменить параметры Active Directory системы и брандмауэра Windows. Более подробную информацию можно узнать в разделе «Настройка удаленного подключения WMI» и «Устранение неполадок удаленного подключения WMI».

  • Для работы удаленного подключения необходимо включить правильные параметры DCOM. Изменение параметров DCOM может разрешить пользователям с низкими правами доступ к компьютеру для удаленного подключения. Дополнительные сведения см. в статье Защита удаленного подключения 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 - единственное различие заключается в том, что необходимо указать имя удаленной системы. Однако вы можете изменить многие из этих функций: с помощью различных учетных данных или маршрутизации звонка через сторонний компьютер или получить доступ к другому домену.