Udostępnij za pośrednictwem


Aktualizowanie całego wystąpienia

Najczęstszym sposobem aktualizowania wystąpienia klasy WMI jest aktualizowanie całego wystąpienia jednocześnie. Aktualizując całe wystąpienie, usługa WMI nie musi analizować wystąpienia do poszczególnych właściwości i wysyłać je do aplikacji. Zamiast tego usługa WMI może po prostu wysłać pełny przykład. Po zakończeniu usługa WMI może skopiować całe zmodyfikowane wystąpienie na oryginalne wystąpienie.

Poniższa procedura opisuje sposób modyfikowania lub aktualizowania wystąpienia przy użyciu programu PowerShell.

Aby zmodyfikować lub zaktualizować wystąpienie przy użyciu programu PowerShell

  1. Pobierz lokalną kopię obiektu z wywołaniem metody Get-WmiObject.

    $mySettings = get-WMIObject Win32_WmiSetting
    
  2. W razie potrzeby wyświetl właściwości obiektu, wywołując kolekcję Właściwości.

    Mimo że nie jest to wymagane, możesz chcieć znać wartość właściwości przed jej zmianą.

    $mySettings.Properties
    
  3. Wprowadź zmiany we właściwościach obiektu lokalnego.

    Spowoduje to zmianę tylko kopii lokalnej. Aby zapisać zmiany w usłudze WMI, należy umieścić całą kopię z powrotem w repozytorium usługi WMI.

    $mySettings.LoggingLevel = 1
    
  4. Umieść obiekt z powrotem w repozytorium WMI przy użyciu wywołania metody Put.

    $mySettings.Put()
    

Poniższa procedura opisuje sposób modyfikowania lub aktualizowania wystąpienia przy użyciu języka C#.

Aby zmodyfikować lub zaktualizować wystąpienie przy użyciu języka C# (Microsoft.Management.Infrastructure)

  1. Pobierz lokalną kopię obiektu poprzez wywołanie CimSession.GetInstance, jak opisano w Pobieranie wystąpienia usługi 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. W razie potrzeby wyświetl właściwości obiektu, odwołując się do kolekcji Właściwości.

    Mimo że nie jest to wymagane, możesz chcieć znać wartość właściwości przed jej zmianą.

    foreach (CimProperty property in myDisk.CimInstanceProperties)
    {
       Console.WriteLine(property.ToString());
    }
    
    Console.ReadLine();
    
  3. Wprowadź zmiany we właściwościach obiektu lokalnego.

    Spowoduje to zmianę tylko kopii lokalnej. Aby zapisać zmiany w usłudze WMI, należy umieścić całą kopię z powrotem w repozytorium usługi WMI.

    myDisk.CimInstanceProperties["VolumeName"].Value = "NewName";
    
  4. Umieść ponownie obiekt w repozytorium WMI, używając wywołania CimSession.ModifyInstance.

    session.ModifyInstance(Namespace,myDisk);
    

Poniższa procedura opisuje sposób modyfikowania lub aktualizowania wystąpienia przy użyciu programu PowerShell.

Notatka

System.Management była oryginalną przestrzenią nazw platformy .NET używaną do uzyskiwania dostępu do usługi WMI; jednak interfejsy API w tej przestrzeni nazw są ogólnie wolniejsze i nie są skalowane w porównaniu z ich bardziej nowoczesnymi Microsoft.Management.Infrastructure odpowiednikami.

 

Aby zmodyfikować lub zaktualizować wystąpienie przy użyciu języka C# (Microsoft.Management)

  1. Pobierz lokalną kopię obiektu za pomocą wywołania metody ManagementObject.Get.

    using System.Management;
    ...
    ManagementObject myDisk = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
    myDisk.Get();
    
  2. W razie potrzeby wyświetl właściwości obiektu, używając kolekcji Właściwości.

    Mimo że nie jest to wymagane, możesz chcieć znać wartość właściwości przed jej zmianą.

    foreach (PropertyData property in myDisk.Properties)
    {
       Console.WriteLine(property.Name + " " + property.Value);
    }
    
    Console.ReadLine();
    
  3. Wprowadź zmiany we właściwościach obiektu lokalnego.

    Spowoduje to zmianę tylko kopii lokalnej. Aby zapisać zmiany w usłudze WMI, należy umieścić całą kopię z powrotem w repozytorium usługi WMI.

    myDisk["VolumeName"] = "newName";
    
  4. Umieść obiekt z powrotem w repozytorium WMI przy użyciu wywołania ManagementObject.Put lub metody.

    myDisk.Put();
    

Poniższa procedura opisuje sposób modyfikowania lub aktualizowania wystąpienia przy użyciu języka VBScript.

Aby zmodyfikować lub zaktualizować wystąpienie za pomocą języka VBScript

  1. Pobierz lokalną kopię obiektu za pomocą wywołania polecenia GetObject.

  2. W razie potrzeby wyświetl właściwości obiektu z wywołaniem metody Properties_.

    Mimo że nie jest to wymagane, możesz chcieć znać wartość właściwości przed jej zmianą.

  3. Wprowadź wszelkie zmiany we właściwościach obiektu za pomocą wywołania metody SWbemProperty.Value.

    Metoda Value zmienia tylko kopię lokalną. Aby zapisać zmiany w usłudze WMI, należy umieścić całą kopię z powrotem w repozytorium usługi WMI.

  4. Umieść obiekt z powrotem w repozytorium WMI za pomocą wywołania metod SWbemObject.Put_ lub SWbemObject.PutAsync_.

Jak oznaczają nazwy, Put_ synchronicznie aktualizuje, podczas gdy PutAsync_ aktualizuje asynchronicznie. Obie metody zastępują oryginalne wystąpienie zmodyfikowanym wystąpieniem. Aby jednak korzystać z przetwarzania asynchronicznego, należy utworzyć obiekt SWbemSink. Aby uzyskać więcej informacji, odnieś się do Wywoływanie metody.

Poniższa procedura opisuje sposób modyfikowania lub aktualizowania wystąpienia przy użyciu języka C++.

Aby zmodyfikować lub zaktualizować wystąpienie przy użyciu języka C++

  1. Pobierz lokalną kopię wystąpienia za pomocą wywołania polecenia IWbemServices::GetObject lub IWbemServices::GetObjectAsync.

  2. W razie potrzeby wyświetl właściwości obiektu za pomocą wywołania metody IWbemClassObject::Get.

    Mimo że nie jest to wymagane, możesz chcieć znać wartość właściwości przed jej zmianą.

  3. Wprowadź wszelkie niezbędne zmiany w kopii, wywołując IWbemClassObject::Put.

    Metoda Put zmienia tylko kopię lokalną. Aby zapisać zmiany w usłudze WMI, należy umieścić całą kopię z powrotem w repozytorium usługi WMI.

  4. Umieść kopię z powrotem w repozytorium WMI za pomocą wywołania metod IWbemServices::PutInstance lub IWbemServices::PutInstanceAsync.

    Jak oznaczają nazwy, PutInstance aktualizuje synchronicznie, podczas gdy PutInstanceAsync aktualizuje asynchronicznie. Każda z metod zastępuje oryginalne wystąpienie zmodyfikowanym wystąpieniem. Jednak aby móc korzystać z przetwarzania asynchronicznego, należy zaimplementować interfejs IWbemObjectSink.

    Należy pamiętać, że operacja aktualizacji wystąpienia należącego do hierarchii klas może zakończyć się niepowodzeniem z powodu błędu obejmującego inną klasę w hierarchii. Usługa WMI wywołuje metodę PutInstanceAsync każdego dostawcy odpowiedzialnego za klasy, z których wywodzi się klasa, do której należy oryginalne wystąpienie. Jeśli którykolwiek z tych dostawców zakończy się niepowodzeniem, oryginalne żądanie aktualizacji zakończy się niepowodzeniem. Aby uzyskać więcej informacji, zobacz sekcję Uwagi PutInstanceAsync.

Aby uzyskać więcej informacji, zobacz Wywoływanie metody usługodawcy.

Uwaga

Ponieważ wywołanie zwrotne do ujścia może nie być zwracane na tym samym poziomie uwierzytelniania, którego wymaga klient, zaleca się użycie komunikacji semisynchronicznej zamiast komunikacji asynchronicznej. Aby uzyskać więcej informacji, zobacz Wywoływanie metody.