Udostępnij za pośrednictwem


Nawiązywanie połączenia z usługą WMI na komputerze zdalnym

Usługa WMI może służyć do zarządzania i dostępu do danych WMI na komputerach zdalnych. Na połączenia zdalne w usłudze WMI mają wpływ ustawienia Zapora systemu Windows i DCOM. kontrola konta użytkownika (UAC) może również wymagać zmian niektórych ustawień. Jednak po poprawnym ustawieniu wywołanie systemu zdalnego jest bardzo podobne do lokalnego wywołania usługi WMI. Możesz jednak zwiększyć jego złożoność, używając różnych poświadczeń, alternatywnych protokołów uwierzytelniania i innych funkcji zabezpieczeń.

Konfigurowanie komputera na potrzeby połączenia zdalnego

Przed uzyskaniem dostępu do systemu zdalnego za pomocą usługi WMI może być konieczne sprawdzenie niektórych ustawień zabezpieczeń w celu potwierdzenia, że masz dostęp. Specyficznie:

  • System Windows zawiera szereg funkcji zabezpieczeń, które mogą blokować dostęp do skryptów w systemach zdalnych. W związku z tym może być konieczne zmodyfikowanie ustawień usługi Active Directory i Zapory systemu Windows przed wywołaniem usługi WMI. Aby uzyskać więcej informacji, zobacz Konfigurowanie zdalnego połączenia WMI i Rozwiązywanie problemów z zdalnym połączeniem WMI.

  • Prawidłowe ustawienia DCOM muszą być włączone, aby połączenie zdalne działało. Zmiana ustawień modelu DCOM umożliwia użytkownikom o niskich uprawnieniach dostęp do komputera na potrzeby połączenia zdalnego. Aby uzyskać więcej informacji, zobacz Zabezpieczanie zdalnego połączenia WMI.

Ponadto mogą wystąpić okoliczności, w których możesz chcieć uruchomić usługę WMI przez stały port. W tym celu należy również zmienić ustawienia. Aby uzyskać więcej informacji, zobacz Konfigurowanie stałego portu dla usługi WMI.

Nawiązywanie połączenia z komputerem zdalnym

W jego centrum połączenie z systemem zdalnym za pomocą usługi WMI polega na upewnieniu się, że masz odpowiednie uprawnienia dostępu do systemu i że połączenie jest prawidłowo skonfigurowane. Po utworzeniu tych dwóch elementów samo połączenie jest stosunkowo proste. Jeśli na przykład używasz domyślnych poświadczeń zabezpieczeń, możesz uzyskać dostęp do usługi WMI w systemie zdalnym przy użyciu następującego kodu:

nawiązywanie połączenia z usługą WMI zdalnie przy użyciu programu PowerShell

Użyj parametru -ComputerName, który jest typowy dla większości poleceń cmdlet usługi WMI, takich jak Get-WmiObject.

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

Nawiązywanie połączenia z usługą WMI zdalnie przy użyciu języka VBScript

Użyj pseudonimu zawierającego nazwę systemu zdalnego w wywołaniu do GetObject.

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

Nawiązywanie połączenia z usługą WMI zdalnie przy użyciu języka C#

W przypadku bieżącej wersji interfejsu zarządzanego WMI (Microsoft.Management.Infrastructure) użyj obiektu CimSession, aby reprezentować połączenie z hostem zdalnym.

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);

Nawiązywanie połączenia z usługą WMI zdalnie przy użyciu języka C#

W przypadku wersji 1 interfejsu zarządzanego WMI (System.Management) użyj obiektu ManagementScope, aby reprezentować połączenie z hostem zdalnym.

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);

przykład : pobieranie danych WMI z komputera zdalnego (C++)

Użyj metody IWbemLocator::ConnectServer, aby określić nazwę komputera zdalnego w parametrze 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
        );

Poprzednie przykłady kodu są prawdopodobnie najbardziej podstawowym połączeniem zdalnym, które można wykonać za pomocą usługi WMI. W szczególności w przykładach przyjęto założenie, że:

  • Jesteś administratorem na maszynie zdalnej. Ze względu na Kontrola konta użytkownika, konto w systemie zdalnym musi być kontem domenowym w grupie Administratorów. Aby uzyskać więcej informacji, zobacz Kontrola konta użytkownika i WMI.
  • Hasło na bieżącym komputerze lokalnym nie jest puste. Jest to zasadniczo wymaganie zabezpieczeń systemu Windows, które oznacza, że musisz zalogować się do systemu przy użyciu hasła.
  • Zarówno komputery lokalne, jak i zdalne znajdują się w tej samej domenie. Jeśli musisz przekroczyć granice domeny, musisz podać dodatkowe informacje lub użyć nieco innego modelu programowania.
  • Używasz własnego konta do uzyskiwania dostępu do maszyny zdalnej. Jeśli próbujesz uzyskać dostęp do innego konta, musisz podać dodatkowe poświadczenia. (Pamiętaj, że próba uzyskania dostępu do usługi WMI lokalnie przy użyciu poświadczeń innych niż bieżące konto nie jest dozwolona).
  • Na obu komputerach działa protokół IPv6. Usługa WMI obsługuje połączenia z komputerami z uruchomionym protokołem IPv6. Jednak zarówno komputer lokalny, jak i "Computer_B" muszą mieć uruchomiony protokół IPv6. Na każdym komputerze może być również uruchomiony protokół IPv4. Aby uzyskać więcej informacji, zobacz obsługa protokołów IPv6 i IPv4 w usłudze WMI.
  • Skrypt nie musi delegować — oznacza to, że nie musi uzyskiwać dostępu do dodatkowych komputerów zdalnych za pośrednictwem docelowego komputera zdalnego. Aby uzyskać więcej informacji, zobacz Delegowanie przy użyciu WMI.
  • Próbujesz wykonać określone wywołanie, zamiast tworzyć proces zdalny. Aby uzyskać więcej informacji, zobacz Tworzenie procesów zdalnie przy użyciu usługi WMI.

Mając na uwadze te ograniczenia, zdalne wywołanie usługi WMI jest bardzo podobne do lokalnego wywołania usługi WMI — jedyną różnicą jest to, że należy określić nazwę systemu zdalnego. Można jednak zmienić wiele z tych parametrów: używając różnych poświadczeń, routując swoje połączenie przez komputer zewnętrzny lub uzyskując dostęp do innej domeny.