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 firewall e DCOM Windows. Il controllo account utente può richiedere anche 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 confermare l'accesso. In particolare:

  • Windows contiene numerose funzionalità di sicurezza che possono bloccare l'accesso agli script nei sistemi remoti. Di conseguenza, potrebbe essere necessario modificare le impostazioni di Active Directory del sistema e Windows Firewall 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.

  • Le impostazioni DCOM corrette devono essere abilitate per il funzionamento di una connessione remota. La modifica delle impostazioni DCOM può consentire agli utenti con diritti bassi l'accesso a un computer per una connessione remota. Per altre informazioni, vedere Protezione di una connessione WMI remota.

Inoltre, potrebbe verificarsi qualche circostanza in cui si desidera eseguire WMI anche se una porta fissa. A tale scopo, sarà 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 avere le autorizzazioni appropriate per accedere al sistema e che la connessione sia configurata correttamente. Dopo avere 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 remoto 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 remoto con VBScript

Usare un moniker che contiene 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 remoto con C #

Per la versione corrente dell'interfaccia gestita WMI (Microsoft.Management.Infrastructure), usare 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 remoto con C #

Per la versione 1 dell'interfaccia gestita WMI (System.Management), usare 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ù di base che è possibile eseguire con WMI. In particolare, gli esempi presuppongono quanto segue:

  • Si è un amministratore nel computer remoto. A causa del controllo account utente, l'account nel sistema remoto deve essere un account di dominio nel gruppo Administrators. Per altre informazioni, vedere Controllo account utente e WMI.
  • La password nel computer locale corrente non è vuota. Si tratta essenzialmente di un requisito di sicurezza 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 attraversare i limiti di dominio, è necessario fornire informazioni aggiuntive o usare un modello di programmazione leggermente diverso.
  • Si usa il proprio account per accedere al computer remoto. Se si sta tentando di accedere a un account diverso, è necessario fornire credenziali aggiuntive. Si noti che il tentativo di accesso a WMI in locale con credenziali diverse rispetto all'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 essere in esecuzione IPv6. Entrambi i computer possono essere in esecuzione anche IPv4. Per altre informazioni, vedere Supporto IPv6 e IPv4 in WMI.
  • Lo script non deve delegare, ovvero non è necessario accedere a computer remoti aggiuntivi 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 remoto tramite WMI.

Con 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.