Aracılığıyla paylaş


Bir Instance'ın Tamamını Güncelleme

WMI sınıf örneğini güncelleştirmenin en yaygın yöntemi, örneğin tamamını aynı anda güncelleştirmektir. Bir örneğin tamamını güncelleştirerek WMI'nin örneği ayrıştırıp tek tek özelliklere ayırması ve bunları uygulamanıza göndermesi gerekmez. Bunun yerine WMI size örneğin tamamını gönderebilir. Bitirdiğinizde WMI, değiştirilen örneğinizin tamamını özgün örneğin üzerine kopyalayabilir.

Aşağıdaki yordamda PowerShell kullanarak bir örneğin nasıl değiştirileceği veya güncelleştirildiği açıklanmaktadır.

PowerShell kullanarak bir örneği değiştirmek veya güncelleştirmek için

  1. Get-WmiObject çağrısıyla nesnenin yerel bir kopyasını alın.

    $mySettings = get-WMIObject Win32_WmiSetting
    
  2. Gerekirse, Properties koleksiyonuna bir çağrı ile nesnesinin özelliklerini görüntüleyin.

    Gerekli olmasa da, özelliği değiştirmeden önce değerini bilmek isteyebilirsiniz.

    $mySettings.Properties
    
  3. Yerel nesne özelliklerinde herhangi bir değişiklik yapın.

    Bunun yapılması yalnızca yerel kopyayı değiştirir. DEĞIŞIKLIKLERInizi WMI'ye kaydetmek için kopyanın tamamını WMI deposuna geri yerleştirmeniz gerekir.

    $mySettings.LoggingLevel = 1
    
  4. Put yöntemine bir çağrı kullanarak nesneyi WMI deposuna geri yerleştirin.

    $mySettings.Put()
    

Aşağıdaki yordamda, C# kullanarak bir örneğin nasıl değiştirileceği veya güncelleştirildiği açıklanmaktadır.

C# (Microsoft.Management.Infrastructure) kullanarak bir örneği değiştirmek veya güncelleştirmek için

  1. CimSession.GetInstanceçağrısıyla nesnenin yerel bir kopyasını WMI Örneği Almabölümünde açıklandığı gibi alın.

    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. Gerekirse, Properties koleksiyonuna bir çağrı ile nesnesinin özelliklerini görüntüleyin.

    Gerekli olmasa da, özelliği değiştirmeden önce değerini bilmek isteyebilirsiniz.

    foreach (CimProperty property in myDisk.CimInstanceProperties)
    {
       Console.WriteLine(property.ToString());
    }
    
    Console.ReadLine();
    
  3. Yerel nesne özelliklerinde herhangi bir değişiklik yapın.

    Bunun yapılması yalnızca yerel kopyayı değiştirir. DEĞIŞIKLIKLERInizi WMI'ye kaydetmek için kopyanın tamamını WMI deposuna geri yerleştirmeniz gerekir.

    myDisk.CimInstanceProperties["VolumeName"].Value = "NewName";
    
  4. CimSession.ModifyInstance çağrısı kullanarak nesneyi WMI deposuna geri yerleştirin.

    session.ModifyInstance(Namespace,myDisk);
    

Aşağıdaki yordamda PowerShell kullanarak bir örneğin nasıl değiştirileceği veya güncelleştirildiği açıklanmaktadır.

Not

System.Management WMI'ye erişmek için kullanılan özgün .NET ad alanıydı; ancak, bu ad alanındaki API'ler genellikle daha yavaştır ve daha modern Microsoft.Management.Infrastructure karşılıklarına göre ölçeklendirilmemektedir.

 

C# (Microsoft.Management) kullanarak bir örneği değiştirmek veya güncelleştirmek için

  1. ManagementObject.Getçağrısıyla nesnenin yerel bir kopyasını alın.

    using System.Management;
    ...
    ManagementObject myDisk = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
    myDisk.Get();
    
  2. Gerekirse, Properties koleksiyonuna bir çağrı ile nesnesinin özelliklerini görüntüleyin.

    Gerekli olmasa da, özelliği değiştirmeden önce onun değerini bilmek isteyebilirsiniz.

    foreach (PropertyData property in myDisk.Properties)
    {
       Console.WriteLine(property.Name + " " + property.Value);
    }
    
    Console.ReadLine();
    
  3. Yerel nesne özelliklerinde herhangi bir değişiklik yapın.

    Bunun yapılması yalnızca yerel kopyayı değiştirir. DEĞIŞIKLIKLERInizi WMI'ye kaydetmek için kopyanın tamamını WMI deposuna geri yerleştirmeniz gerekir.

    myDisk["VolumeName"] = "newName";
    
  4. ManagementObject.Put veya yöntemine bir çağrı kullanarak nesneyi WMI deposuna geri yerleştirin.

    myDisk.Put();
    

Aşağıdaki yordamda VBScript kullanarak bir örneğin nasıl değiştirileceği veya güncelleştirildiği açıklanmaktadır.

VBScript kullanarak bir örneği değiştirmek veya güncelleştirmek için

  1. GetObject çağrısıyla nesnenin yerel bir kopyasını alın.

  2. Gerekirse, Properties_ yöntemine bir çağrı ile nesnesinin özelliklerini görüntüleyin.

    Gerekli olmasa da, özelliği değiştirmeden önce değerini bilmek isteyebilirsiniz.

  3. SWbemProperty.Value yöntemine yapılan bir çağrıyla nesne özelliklerinde herhangi bir değişiklik yapın.

    Value yöntemi yalnızca yerel kopyayı değiştirir. DEĞIŞIKLIKLERInizi WMI'ye kaydetmek için kopyanın tamamını WMI deposuna geri yerleştirmeniz gerekir.

  4. SWbemObject.Put_ veya SWbemObject.PutAsync_ yöntemlerini çağırarak nesneyi WMI deposuna geri yerleştirin.

Adların da belirttiği gibi, Put_ eşzamanlı olarak güncellenirken PutAsync_ zaman uyumsuz olarak güncellenir. Her iki yöntem de değiştirilmiş örneğinizle birlikte özgün örneğin üzerine kopyalanır. Ancak, zaman uyumsuz işlemeden yararlanmak için bir SWbemSink nesnesi oluşturmanız gerekir. Daha fazla bilgi için bkz. Bir yöntemi çağırma.

Aşağıdaki yordamda, C++ kullanarak bir örneğin nasıl değiştirileceği veya güncelleştirildiği açıklanmaktadır.

C++ kullanarak bir örneği değiştirmek veya güncelleştirmek için

  1. IWbemServices::GetObject veya IWbemServices::GetObjectAsyncçağrısıyla örneğin yerel bir kopyasını alın.

  2. Gerekirse, IWbemClassObject::Getçağrısıyla nesnesinin özelliklerini görüntüleyin.

    Gerekli olmasa da, özelliği değiştirmeden önce değerini bilmek isteyebilirsiniz.

  3. IWbemClassObject::Putçağrısıyla kopyada gerekli değişiklikleri yapın.

    Put yöntemi yalnızca yerel kopyayı değiştirir. DEĞIŞIKLIKLERInizi WMI'ye kaydetmek için kopyanın tamamını WMI deposuna geri yerleştirmeniz gerekir.

  4. IWbemServices::P utInstance veya IWbemServices::P utInstanceAsync yöntemlerini çağırarak kopyanızı WMI deposuna geri yerleştirin.

    Adların da belirttiği gibi, PutInstance zaman uyumlu olarak güncelleştirilirken PutInstanceAsync zaman uyumsuz olarak güncelleştirilir. Her iki yöntem de değiştirilmiş örneğinizin üzerine özgün örneğin kopyalanmasını sağlar. Ancak, zaman uyumsuz işlemeden yararlanmak için IWbemObjectSink arabirimini uygulamanız gerekir.

    Bir sınıf hiyerarşisine ait bir örnekteki güncelleştirme işleminin, hiyerarşideki başka bir sınıfı içeren bir hata nedeniyle başarılı olmayabileceğini unutmayın. WMI, özgün örneğe sahip olan sınıfın türetildiği sınıflardan sorumlu sağlayıcıların her birinin PutInstanceAsync yöntemini çağırır. Bu sağlayıcılardan herhangi biri başarısız olursa özgün güncelleştirme isteği başarısız olur. Daha fazla bilgi için putInstanceAsyncaçıklamalar bölümüne bakın.

Daha fazla bilgi için bkz. Sağlayıcı Yöntemini Çağırma.

Not

Havuza geri çağırma, istemcinin gerektirdiği kimlik doğrulama düzeyinde her zaman dönmeyebilir; bu nedenle zaman uyumsuz iletişim yerine yarı zaman uyumlu iletişim kullanmanız önerilir. Daha fazla bilgi için bkz. Yöntem çağırma.