Partager via


Mise à jour d’une instance entière

Le moyen le plus courant de mettre à jour une instance de classe WMI consiste à mettre à jour la totalité de l’instance à la fois. En mettant à jour une instance entière, WMI n’a pas besoin d’analyser l’instance en propriétés individuelles et de les envoyer à votre application. À la place, WMI peut simplement vous envoyer l’instance entière. Lorsque vous avez terminé, WMI peut copier la totalité de votre instance modifiée sur l’instance d’origine.

La procédure suivante décrit comment modifier ou mettre à jour une instance à l’aide de PowerShell.

Pour modifier ou mettre à jour une instance à l’aide de PowerShell

  1. Récupérez une copie locale de l’objet avec un appel à Get-WmiObject.

    $mySettings = get-WMIObject Win32_WmiSetting
    
  2. Si nécessaire, affichez les propriétés de l’objet avec un appel à la collection de propriétés.

    Bien que ce ne soit pas obligatoire, vous souhaiterez peut-être connaître la valeur de la propriété avant de la modifier.

    $mySettings.Properties
    
  3. Apportez des modifications aux propriétés de l’objet local.

    Cela modifie uniquement la copie locale. Pour enregistrer vos modifications dans WMI, vous devez replacer l’intégralité de la copie dans le référentiel WMI.

    $mySettings.LoggingLevel = 1
    
  4. Replacez l’objet dans le référentiel WMI à l’aide d’un appel à la méthode Put.

    $mySettings.Put()
    

La procédure suivante décrit comment modifier ou mettre à jour une instance à l’aide de C#.

Pour modifier ou mettre à jour une instance à l’aide de C# (Microsoft.Management.Infrastructure)

  1. Récupérez une copie locale de l’objet avec un appel à CimSession.GetInstance, comme décrit dans Récupération d’une instance WMI.

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string className = "win32_logicalDisk";
    
    CimInstance diskDrive = new CimInstance(className, Namespace);
    diskDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));
    
    CimSession session = CimSession.Create("localhost");
    CimInstance myDisk = session.GetInstance(Namespace, diskDrive);
    
  2. Si nécessaire, affichez les propriétés de l’objet avec un appel à la collection de propriétés.

    Bien que ce ne soit pas obligatoire, vous souhaiterez peut-être connaître la valeur de la propriété avant de la modifier.

    foreach (CimProperty property in myDisk.CimInstanceProperties)
    {
       Console.WriteLine(property.ToString());
    }
    
    Console.ReadLine();
    
  3. Apportez des modifications aux propriétés de l’objet local.

    Cela modifie uniquement la copie locale. Pour enregistrer vos modifications dans WMI, vous devez replacer l’intégralité de la copie dans le référentiel WMI.

    myDisk.CimInstanceProperties["VolumeName"].Value = "NewName";
    
  4. Replacez l’objet dans le référentiel WMI à l’aide d’un appel à CimSession.ModifyInstance.

    session.ModifyInstance(Namespace,myDisk);
    

La procédure suivante décrit comment modifier ou mettre à jour une instance à l’aide de PowerShell.

Notes

System.Management était l’espace de noms .NET d’origine utilisé pour accéder à WMI ; toutefois, les API de cet espace de noms sont généralement plus lentes et ne sont pas mises à l’échelle aussi bien par rapport à leurs équivalents Microsoft.Management.Infrastructure plus modernes.

 

Pour modifier ou mettre à jour une instance à l’aide de C# (Microsoft.Management)

  1. Récupérez une copie locale de l’objet avec un appel à ManagementObject.Get.

    using System.Management;
    ...
    ManagementObject myDisk = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
    myDisk.Get();
    
  2. Si nécessaire, affichez les propriétés de l’objet avec un appel à la collection de propriétés.

    Bien que ce ne soit pas obligatoire, vous souhaiterez peut-être connaître la valeur de la propriété avant de la modifier.

    foreach (PropertyData property in myDisk.Properties)
    {
       Console.WriteLine(property.Name + " " + property.Value);
    }
    
    Console.ReadLine();
    
  3. Apportez des modifications aux propriétés de l’objet local.

    Cela modifie uniquement la copie locale. Pour enregistrer vos modifications dans WMI, vous devez replacer l’intégralité de la copie dans le référentiel WMI.

    myDisk["VolumeName"] = "newName";
    
  4. Replacez l’objet dans le référentiel WMI à l’aide d’un appel à la méthode ManagementObject.Put.

    myDisk.Put();
    

La procédure suivante décrit comment modifier ou mettre à jour une instance à l’aide de VBScript.

Pour modifier ou mettre à jour une instance à l’aide de VBScript

  1. Récupérez une copie locale de l’objet avec un appel à GetObject.

  2. Si nécessaire, affichez les propriétés de l’objet avec un appel à la méthode Properties_.

    Bien que ce ne soit pas obligatoire, vous souhaiterez peut-être connaître la valeur de la propriété avant de la modifier.

  3. Apportez des modifications aux propriétés de l’objet avec un appel à la méthode SWbemProperty.Value.

    La méthode Value modifie uniquement la copie locale. Pour enregistrer vos modifications dans WMI, vous devez replacer l’intégralité de la copie dans le référentiel WMI.

  4. Replacez l’objet dans le référentiel WMI avec un appel des méthodes SWbemObject.Put_ ou SWbemObject.PutAsync_.

Comme le suggèrent leurs noms, Put_ met à jour de manière synchrone, tandis que PutAsync_ met à jour de manière asynchrone. Les deux méthodes copient sur l’instance d’origine avec votre instance modifiée. Toutefois, pour tirer parti du traitement asynchrone, vous devez créer un objet SWbemSink. Pour plus d’informations, consultez Appel d’une méthode.

La procédure suivante décrit comment modifier ou mettre à jour une instance à l’aide de C++.

Pour modifier ou mettre à jour une instance à l’aide de C++

  1. Récupérez une copie locale de l’instance avec un appel à IWbemServices::GetObject ou à IWbemServices::GetObjectAsync.

  2. Si nécessaire, affichez les propriétés de l’objet avec un appel à IWbemClassObject::Get.

    Bien que ce ne soit pas obligatoire, vous souhaiterez peut-être connaître la valeur de la propriété avant de la modifier.

  3. Apportez les modifications nécessaires à la copie en appelant IWbemClassObject::Put.

    La méthode Put modifie uniquement la copie locale. Pour enregistrer vos modifications dans WMI, vous devez replacer l’intégralité de la copie dans le référentiel WMI.

  4. Replacez votre copie dans le référentiel WMI avec un appel des méthodes IWbemServices::PutInstance ou IWbemServices::PutInstanceAsync.

    Comme le suggèrent leurs noms, PutInstance met à jour de manière synchrone, tandis que PutInstanceAsync met à jour de manière asynchrone. Les deux méthodes copient sur l’instance d’origine avec votre instance modifiée. Toutefois, pour tirer parti du traitement asynchrone, vous devez implémenter l’interface IWbemObjectSink.

    Vous devez savoir qu’une opération de mise à jour sur une instance appartenant à une hiérarchie de classes peut ne pas réussir en raison d’une erreur impliquant une autre classe dans cette hiérarchie. WMI appelle la méthode PutInstanceAsync de chacun des fournisseurs responsables des classes dont dérive la classe propriétaire de l’instance d’origine. Si l’un de ces fournisseurs échoue, la demande de mise à jour d’origine échoue. Pour plus d’informations, consultez la section Remarques de PutInstanceAsync.

Pour plus d’informations, consultez Appel d’une méthode de fournisseur.

Notes

Étant donné que le rappel au récepteur peut ne pas être retourné au même niveau d’authentification que celui requis par le client, il est recommandé d’utiliser une communication semi-synchrone plutôt qu’une communication asynchrone. Pour plus d’informations, consultez Appel d’une méthode.