Connessione a WMI in un computer remoto

WMI può essere usato per gestire e accedere ai dati WMI nei computer remoti. Le connessioni remote in WMI sono interessate dalle impostazioni di Windows Firewall e DCOM. Il controllo dell'account utente può anche richiedere modifiche ad alcune impostazioni. Tuttavia, una volta corrette le impostazioni, la chiamata a un sistema remoto è molto simile a una chiamata WMI locale. È possibile scegliere di renderlo più complesso, tuttavia, usando credenziali diverse, protocolli di autenticazione alternativi e altre funzionalità di sicurezza.

Configurazione di un computer per una connessione remota

Prima di poter accedere a un sistema remoto con WMI, potrebbe essere necessario controllare alcune impostazioni di sicurezza per verificare di avere accesso. In particolare:

  • Windows contiene una serie di funzionalità di sicurezza che possono bloccare l'accesso agli script nei sistemi remoti. Di conseguenza, potrebbe essere necessario modificare le impostazioni di Active Directory e Windows Firewall del sistema prima di effettuare una chiamata WMI. Per altre informazioni, vedere Configurazione di una connessione WMI remota e Risoluzione dei problemi di una connessione WMI remota.

  • Per il corretto funzionamento di una connessione remota, è necessario abilitare le impostazioni DCOM corrette. La modifica delle impostazioni DCOM consente agli utenti con diritti limitati di accedere a un computer per una connessione remota. Per altre informazioni, vedere Protezione di una connessione WMI remota.

Inoltre, potrebbero esserci alcune circostanze in cui si potrebbe voler eseguire WMI tramite una porta fissa. A tale scopo, è anche necessario modificare le impostazioni. Per altre informazioni, vedere Configurazione di una porta fissa per WMI.

Connessione a un computer remoto

Al suo cuore, la connessione a un sistema remoto con WMI consiste nell'assicurarsi di disporre delle autorizzazioni appropriate per accedere al sistema e che la connessione sia configurata correttamente. Dopo aver ottenuto questi due elementi, la connessione stessa è relativamente semplice. Ad esempio, se si usano le credenziali di sicurezza predefinite, è possibile accedere a WMI in un sistema remoto usando il codice seguente:

Connessione a WMI in modalità remota con PowerShell

Usare il parametro -ComputerName comune alla maggior parte dei cmdlet WMI, ad esempio Get-WmiObject.

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

Connessione a WMI in modalità remota con VBScript

Usare un moniker contenente il nome del sistema remoto nella chiamata a GetObject.

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

Connessione a WMI in modalità remota con C #

Per la versione corrente dell'interfaccia gestita WMI (Microsoft.Management.Infrastructure), utilizzare l'oggetto CimSession per rappresentare una connessione a un host remoto.

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

Connessione a WMI in modalità remota con C #

Per la versione 1 dell'interfaccia gestita WMI (System.Management), utilizzare l'oggetto ManagementScope per rappresentare una connessione a un host remoto.

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

Esempio: Recupero di dati WMI da un computer remoto (C++)

Utilizzare il metodo IWbemLocator::ConnectServer per specificare il nome del computer remoto nel parametro 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
        );

Gli esempi di codice precedenti sono probabilmente la connessione remota più semplice che è possibile eseguire con WMI. In particolare, gli esempi presuppongono quanto segue:

  • Si è un amministratore nel computer remoto. A causa del controllo dell'account utente, l'account nel sistema remoto deve essere un account di dominio nel gruppo Administrators. Per altre informazioni, vedere Controllo dell'account utente e WMI.
  • La password nel computer locale corrente non è vuota. Si tratta essenzialmente di un requisito di sicurezza di Windows che è necessario aver eseguito l'accesso al sistema con una password.
  • Sia i computer locali che remoti si trovano nello stesso dominio. Se è necessario superare i limiti del dominio, è necessario fornire informazioni aggiuntive o usare un modello di programmazione leggermente diverso.
  • Si sta usando il proprio account per accedere al computer remoto. Se si tenta di accedere a un account diverso, è necessario specificare credenziali aggiuntive. Si noti che il tentativo di accedere a WMI in locale con credenziali diverse dall'account corrente non è consentito.
  • Entrambi i computer eseguono IPv6. WMI supporta le connessioni ai computer che eseguono IPv6. Tuttavia, sia il computer locale che "Computer_B" devono eseguire IPv6. Entrambi i computer possono eseguire anche IPv4. Per altre informazioni, vedere Supporto IPv6 e IPv4 in WMI.
  • Lo script non deve delegare, ovvero non deve accedere ad altri computer remoti tramite il computer remoto di destinazione. Per altre informazioni, vedere Delega con WMI.
  • Si sta tentando di effettuare una chiamata specifica, anziché creare un processo remoto. Per altre informazioni, vedere Creazione di processi in modalità remota tramite WMI.

Tenendo presente queste restrizioni, una chiamata WMI remota è molto simile a una chiamata WMI locale. L'unica differenza è che è necessario specificare il nome del sistema remoto. Tuttavia, è possibile scegliere di modificare molte di queste funzionalità: usando credenziali diverse o instradando la chiamata tramite un computer di terze parti o accedendo a un dominio diverso.