Aktualisieren einer gesamten Instanz

Die gängigste Möglichkeit zum Aktualisieren einer WMI-Klasseninstanz ist das gleichzeitige Aktualisieren der gesamten Instanz. Durch aktualisieren einer gesamten Instanz muss WMI die Instanz nicht in einzelne Eigenschaften analysieren und an Ihre Anwendung senden. Stattdessen kann WMI ihnen einfach die gesamte Instanz senden. Wenn Sie fertig sind, kann WMI dann ihre gesamte geänderte Instanz über die ursprüngliche Instanz kopieren.

Im folgenden Verfahren wird beschrieben, wie Sie eine Instanz mithilfe von PowerShell ändern oder aktualisieren.

So ändern oder aktualisieren Sie eine Instanz mithilfe von PowerShell

  1. Rufen Sie eine lokale Kopie des -Objekts mit einem Aufruf von Get-WmiObject ab.

    $mySettings = get-WMIObject Win32_WmiSetting
    
  2. Zeigen Sie bei Bedarf die Eigenschaften des -Objekts mit einem Aufruf der Properties-Auflistung an.

    Obwohl dies nicht erforderlich ist, möchten Sie möglicherweise den Wert der Eigenschaft kennen, bevor Sie ihn ändern.

    $mySettings.Properties
    
  3. Nehmen Sie Änderungen an den eigenschaften des lokalen Objekts vor.

    Dadurch wird nur die lokale Kopie geändert. Um Ihre Änderungen an WMI zu speichern, müssen Sie die gesamte Kopie wieder in das WMI-Repository platzieren.

    $mySettings.LoggingLevel = 1
    
  4. Platzieren Sie das Objekt mithilfe eines Aufrufs der Put-Methode wieder im WMI-Repository.

    $mySettings.Put()
    

Im folgenden Verfahren wird beschrieben, wie Eine -Instanz mithilfe von C# geändert oder aktualisiert wird.

So ändern oder aktualisieren Sie eine Instanz mit C# (Microsoft.Management.Infrastructure)

  1. Rufen Sie eine lokale Kopie des -Objekts mit einem Aufruf von CimSession.GetInstanceab, wie unter Abrufen einer WMI-Instanz beschrieben.

    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. Zeigen Sie bei Bedarf die Eigenschaften des -Objekts mit einem Aufruf der Properties-Auflistung an.

    Obwohl dies nicht erforderlich ist, möchten Sie möglicherweise den Wert der Eigenschaft kennen, bevor Sie ihn ändern.

    foreach (CimProperty property in myDisk.CimInstanceProperties)
    {
       Console.WriteLine(property.ToString());
    }
    
    Console.ReadLine();
    
  3. Nehmen Sie Änderungen an den eigenschaften des lokalen Objekts vor.

    Dadurch wird nur die lokale Kopie geändert. Um Ihre Änderungen an WMI zu speichern, müssen Sie die gesamte Kopie wieder in das WMI-Repository platzieren.

    myDisk.CimInstanceProperties["VolumeName"].Value = "NewName";
    
  4. Platzieren Sie das Objekt mithilfe eines Aufrufs von CimSession.ModifyInstancewieder im WMI-Repository.

    session.ModifyInstance(Namespace,myDisk);
    

Im folgenden Verfahren wird beschrieben, wie Sie eine Instanz mithilfe von PowerShell ändern oder aktualisieren.

Hinweis

System.Management war der ursprüngliche .NET-Namespace, der für den Zugriff auf WMI verwendet wurde. Die APIs in diesem Namespace sind jedoch im Allgemeinen langsamer und werden im Vergleich zu ihren moderneren Microsoft.Management.Infrastructure-Entsprechungen nicht so gut skaliert.

So ändern oder aktualisieren Sie eine Instanz mit C# (Microsoft.Management)

  1. Rufen Sie eine lokale Kopie des -Objekts mit einem Aufruf von ManagementObject.Get ab.

    using System.Management;
    ...
    ManagementObject myDisk = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
    myDisk.Get();
    
  2. Zeigen Sie bei Bedarf die Eigenschaften des -Objekts mit einem Aufruf der Properties-Auflistung an.

    Obwohl dies nicht erforderlich ist, möchten Sie möglicherweise den Wert der Eigenschaft kennen, bevor Sie ihn ändern.

    foreach (PropertyData property in myDisk.Properties)
    {
       Console.WriteLine(property.Name + " " + property.Value);
    }
    
    Console.ReadLine();
    
  3. Nehmen Sie Änderungen an den eigenschaften des lokalen Objekts vor.

    Dadurch wird nur die lokale Kopie geändert. Um Ihre Änderungen an WMI zu speichern, müssen Sie die gesamte Kopie wieder in das WMI-Repository platzieren.

    myDisk["VolumeName"] = "newName";
    
  4. Platzieren Sie das Objekt mithilfe eines Aufrufs von ManagementObject.Put oder der -Methode wieder im WMI-Repository.

    myDisk.Put();
    

Im folgenden Verfahren wird beschrieben, wie Eine -Instanz mit VBScript geändert oder aktualisiert wird.

So ändern oder aktualisieren Sie eine Instanz mit VBScript

  1. Rufen Sie eine lokale Kopie des -Objekts mit einem Aufruf von GetObject ab.

  2. Zeigen Sie bei Bedarf die Eigenschaften des -Objekts mit einem Aufruf der Properties-Methode _ an.

    Obwohl dies nicht erforderlich ist, möchten Sie möglicherweise den Wert der Eigenschaft kennen, bevor Sie ihn ändern.

  3. Nehmen Sie änderungen an den Objekteigenschaften mit einem Aufruf der SWbemProperty.Value-Methode vor.

    Die Value-Methode ändert nur die lokale Kopie. Um Ihre Änderungen an WMI zu speichern, müssen Sie die gesamte Kopie wieder in das WMI-Repository platzieren.

  4. Platzieren Sie das Objekt mit einem Aufruf der Methoden SWbemObject.Put _ oder SWbemObject.PutAsync _ wieder im WMI-Repository.

Wie die Namen implizieren, werden _ Updates synchron und PutAsync _ asynchron aktualisiert. Beide Methoden kopieren die ursprüngliche Instanz mit Ihrer geänderten Instanz. Um jedoch die asynchrone Verarbeitung nutzen zu können, müssen Sie ein SWbemSink-Objekt erstellen. Weitere Informationen finden Sie unter Aufrufen einer Methode.

Im folgenden Verfahren wird beschrieben, wie Eine -Instanz mit C++ geändert oder aktualisiert wird.

So ändern oder aktualisieren Sie eine Instanz mit C++

  1. Rufen Sie eine lokale Kopie der -Instanz mit einem Aufruf von IWbemServices::GetObject oder IWbemServices::GetObjectAsync ab.

  2. Zeigen Sie bei Bedarf die Eigenschaften des -Objekts mit einem Aufruf von IWbemClassObject::Get an.

    Obwohl dies nicht erforderlich ist, möchten Sie möglicherweise den Wert der Eigenschaft kennen, bevor Sie ihn ändern.

  3. Nehmen Sie alle erforderlichen Änderungen an der Kopie mit einem Aufruf von IWbemClassObject::P ut vor.

    Die Put-Methode ändert nur die lokale Kopie. Um Ihre Änderungen an WMI zu speichern, müssen Sie die gesamte Kopie wieder in das WMI-Repository platzieren.

  4. Platzieren Sie Ihre Kopie wieder im WMI-Repository, und rufen Sie die Methoden IWbemServices::P utInstance oder IWbemServices::P utInstanceAsync auf.

    Wie die Namen implizieren, wird PutInstance synchron aktualisiert, während PutInstanceAsync asynchron aktualisiert wird. Beide Methoden kopieren die ursprüngliche Instanz mit Ihrer geänderten Instanz. Um jedoch die asynchrone Verarbeitung nutzen zu können, müssen Sie die IWbemObjectSink-Schnittstelle implementieren.

    Beachten Sie, dass ein Aktualisierungsvorgang für eine Instanz, die zu einer Klassenhierarchie gehört, aufgrund eines Fehlers im Zusammenhang mit einer anderen Klasse in der Hierarchie möglicherweise nicht erfolgreich ist. WMI ruft die PutInstanceAsync-Methode jedes Anbieters auf, der für die Klassen verantwortlich ist, von denen die Klasse, die die ursprüngliche Instanz besitzt, leitet. Wenn einer dieser Anbieter fehlschlägt, schlägt die ursprüngliche Updateanforderung fehl. Weitere Informationen finden Sie im Abschnitt "Hinweise" von PutInstanceAsync.

Weitere Informationen finden Sie unter Aufrufen einer Anbietermethode.

Hinweis

Da der Rückruf an die Senke möglicherweise nicht auf derselben Authentifizierungsebene zurückgegeben wird, wie der Client erfordert, wird empfohlen, anstelle der asynchronen Kommunikation semisynchrone zu verwenden. Weitere Informationen finden Sie unter Aufrufen einer Methode.