Connexion à WMI sur un ordinateur distant

WMI peut être utilisé pour gérer et accéder aux données WMI sur des ordinateurs distants. Les connexions à distance dans WMI sont affectées par le Pare-feu Windows et les paramètres DCOM. Le contrôle de compte d’utilisateur (UAC) peut également nécessiter des modifications de certains paramètres. Toutefois, une fois que vos paramètres sont corrects, l’appel à un système distant est très similaire à un appel WMI local. Vous pouvez toutefois choisir de le rendre plus complexe en utilisant différentes informations d’identification, d’autres protocoles d’authentification et d’autres fonctionnalités de sécurité.

Configuration d’un ordinateur pour une connexion à distance

Avant de pouvoir accéder à un système distant avec WMI, vous devrez peut-être vérifier certains paramètres de sécurité pour vérifier que vous avez accès. Plus précisément :

  • Windows contient un certain nombre de fonctionnalités de sécurité qui peuvent bloquer l’accès aux scripts sur les systèmes distants. Par conséquent, vous devrez peut-être modifier les paramètres Active Directory et Pare-feu Windows de votre système avant d’effectuer un appel WMI. Pour plus d’informations, consultez Configuration d’une connexion WMI distante et Résolution des problèmes d’une connexion WMI distante.

  • Les paramètres DCOM corrects doivent être activés pour qu’une connexion à distance fonctionne. La modification des paramètres DCOM peut permettre aux utilisateurs disposant de droits réduits d’accéder à un ordinateur pour une connexion à distance. Pour plus d’informations, consultez Sécurisation d’une connexion WMI distante.

En outre, il se peut que vous souhaitiez exécuter WMI via un port fixe dans certaines circonstances. Pour ce faire, vous devez également modifier vos paramètres. Pour plus d’informations, consultez Configuration d’un port fixe pour WMI.

Connexion à un ordinateur distant

En son cœur, la connexion à un système distant avec WMI consiste à s’assurer que vous disposez des autorisations appropriées pour accéder au système et que votre connexion est correctement configurée. Une fois que vous avez ces deux éléments, la connexion elle-même est relativement simple. Par exemple, si vous utilisez vos informations d’identification de sécurité par défaut, vous pouvez accéder à WMI sur un système distant à l’aide du code suivant :

Connexion à WMI à distance avec PowerShell

Utilisez le paramètre -ComputerName commun à la plupart des applets de commande WMI, telles que Get-WmiObject.

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

Connexion à WMI à distance avec VBScript

Utilisez un moniker qui contient le nom du système distant dans l’appel à GetObject.

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

Connexion à WMI à distance avec C#

Pour la version actuelle de l’interface managée WMI (Microsoft.Management.Infrastructure), utilisez l’objet CimSession pour représenter une connexion à un hôte distant.

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

Connexion à WMI à distance avec C#

Pour la version v1 de l’interface managée WMI (System.Management), utilisez l’objet ManagementScope pour représenter une connexion à un hôte distant.

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

Exemple : Obtention de données WMI à partir d’un ordinateur distant (C++)

Utilisez la méthode IWbemLocator::ConnectServer pour spécifier le nom de l’ordinateur distant dans le paramètre 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
        );

Les exemples de code précédents sont sans doute la connexion à distance la plus simple que vous pouvez effectuer avec WMI. Plus précisément, les exemples supposent ce qui suit :

  • Vous êtes administrateur sur l’ordinateur distant. En raison du contrôle de compte d’utilisateur, le compte sur le système distant doit être un compte de domaine dans le groupe Administrateurs. Pour plus d’informations, consultez Contrôle de compte d’utilisateur et WMI.
  • Le mot de passe sur votre ordinateur local actuel n’est pas vide. Il s’agit essentiellement d’une exigence de sécurité Windows que vous devez avoir connectée à votre système avec un mot de passe.
  • Vos ordinateurs locaux et distants se trouvent dans le même domaine. Si vous devez franchir les limites de domaine, vous devez fournir des informations supplémentaires ou utiliser un modèle de programmation légèrement différent.
  • Vous utilisez votre propre compte pour accéder à l’ordinateur distant. Si vous essayez d’accéder à un autre compte, vous devez fournir des informations d’identification supplémentaires. (Notez que la tentative d’accès à WMI localement avec des informations d’identification différentes de celles de votre compte actuel n’est pas autorisée.)
  • Les deux ordinateurs exécutent IPv6. WMI prend en charge les connexions aux ordinateurs exécutant IPv6. Toutefois, votre ordinateur local et « Computer_B » doivent exécuter IPv6. L’un ou l’autre ordinateur peut également exécuter IPv4. Pour plus d’informations, consultez Prise en charge IPv6 et IPv4 dans WMI.
  • Votre script n’a pas besoin de déléguer. Autrement dit, il n’a pas besoin d’accéder à d’autres ordinateurs distants via l’ordinateur distant ciblé. Pour plus d'informations, consultez Utilisation des requêtes.
  • Vous essayez d’effectuer un appel spécifique, plutôt que de créer un processus distant. Pour plus d’informations, consultez Création de processus à distance à l’aide de WMI.

Avec ces restrictions à l’esprit, un appel WMI distant est très similaire à un appel WMI local, la seule différence étant que vous devez spécifier le nom du système distant. Toutefois, vous pouvez choisir de modifier un grand nombre de ces fonctionnalités : utilisation d’informations d’identification différentes, routage de votre appel via un ordinateur tiers ou accès à un autre domaine.