Aracılığıyla paylaş


Örneğin Bir Bölümünü Güncelleştirme

Bazen bir örneğin yalnızca bir bölümünü güncelleştirmek isteyebilirsiniz. Örneğin, bazı örneklerin çok sayıda özelliği vardır. Bu örneklerin çok sayıda güncelleştirmeniz gerekiyorsa sistem performansını düşürebilirsiniz. Bu nedenle, örneğin yalnızca bir bölümünü güncelleştirmeyi seçebilir ve böylece WMI'ye ve WMI'den göndermeniz ve almanız gereken bilgi miktarını azaltabilirsiniz. Ancak, WMI kısmi örnek işlemlerini doğrudan desteklemediği gibi, çoğu sağlayıcı da bunu desteklemez. Bu nedenle, kısmi örnek işlemleri kullanan bir uygulama yazarsanız, çağrılarınızın C++ içindeki WBEM_E_PROVIDER_NOT_CAPABLE veya WBEM_E_NOT_SUPPORTED hata koduyla başarısız olmasına hazırlıklı olun. Betik dillerinde hata kodları ya wbemErrProviderNotCapable ya da wbemErrNotSupportedşeklindedir.

Betik oluşturmada, bu işlem yalnızca bir kuruluş genelinde çok sayıda nesne üzerinde bir veya iki yazılabilir özelliği güncelleştirirken performansa yardımcı olmak amacıyla gereklidir. Aksi takdirde, normal VBScript SWbemObject.Put_ veya SWbemObject.PutAsync_çağrıları, nesnenin tamamını yazıyor gibi görünmesine rağmen, aslında yalnızca sağlayıcının yazma etkin olduğu özellikleri güncelleştirir.

Aşağıdaki yordamda, PowerShell kullanarak kısmi örnek güncelleştirmesinin nasıl istendiği açıklanmaktadır.

PowerShell kullanarak kısmi örnek güncelleştirmesi istemek için

  1. Güncelleştirmek istediğiniz nesnenin yolunu alın.

    Yolu el ile açıklayabilir veya nesneyi sorgulayabilir ve ardından __Path özelliğini alabilirsiniz.

    $myWMIDrivePath = (get-wmiObject Win32_LogicalDisk -filter "Name = 'C:'").__Path
    #or
    $myWmiDrivePath = \\myComputer\root\cimv2:Win32_LogicalDisk.DeviceID="C:"
    
  2. Güncelleştirilecek özelliklerin adlarını listeleyen bir karma tablo ayarlayın ve bu karma tabloyu Set-WmiInstance çağrısında kullanın.

    $newDriveName = @{VolumeName = "OSDisk"}
    Set-WmiInstance -Path $myWMIDrivePath -Arguments $newDriveName
    

Aşağıdaki yordamda, C# kullanarak kısmi örnek güncelleştirmesinin nasıl istendiğ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# kullanarak kısmi örnek güncelleştirmesi istemek için

  1. Güncelleştirilecek örneği temsil eden yeni bir ManagementObject nesnesi oluşturun.

    using System.Management;
    ...
    ManagementObject myDisk = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
    
  2. ManagementObject.SetPropertyValueçağrısıyla özellik değerini ayarlayın.

    myDisk.SetPropertyValue("VolumeName", "OSDisk");
    

Aşağıdaki yordamda VBScript kullanılarak kısmi örnek güncelleştirmesinin nasıl istendiği açıklanmaktadır.

VBScript kullanarak kısmi örnek güncelleştirmesi istemek için

  1. SWbemNamedValueSet bağlam nesnesi oluşturun.

    Set objwbemNamedValueSet = CreateObject ("WbemScripting.SWbemNamedValueSet")
    
  2. SWbemNamedValueSet.Add yöntemini kullanarak bağlam nesnesine "__PUT_EXTENSIONS" ve "__PUT_EXT_CLIENT_REQUEST" uzantı değerlerini ekleyin.

    objwbemNamedValueSet.Add "__PUT_EXTENSIONS", True
    objwbemNamedValueSet.Add "__PUT_EXT_CLIENT_REQUEST", True
    
  3. Güncelleştirilecek özelliklerin adlarını listeleyen bir dizi ayarlayın ve bu diziyi "__PUT_EXT_PROPERTIES" Put uzantısı değeriyle SWbemNamedValueSet bağlam nesnesine ekleyin.

    arProperties = Array("propertyname1", "propertyname2") 
    objwbemNamedValueSet.Add "__PUT_EXT_PROPERTIES", arProperties
    
  4. iFlags parametresini SWbemObject.Put_ çağrısında wbemChangeFlagUpdateOnlyolarak ayarlayın. Bu bayrak olmadan çağrı geçersiz bir bağlamla başarısız olur.

  5. bayrağınızı ve bağlam nesnenizi SWbemObject.Put_ veya SWbemObject.PutAsync_objwbemNamedValueSet parametresinde sağlayıcıya geçirin.

    call objSystem.put_( wbemChangeFlagUpdateOnly, objwbemNamedValueSet)
    

Aşağıdaki yordamda, C++ kullanarak kısmi örnek güncelleştirmesinin nasıl istendiği açıklanmaktadır.

C++ kullanarak kısmi örnek güncelleştirmesi istemek için

  1. CoCreateInstanceçağrısıyla bir IWbemContext nesnesi oluşturun.

    Bağlam nesnesi, WMI'nin bir WMI sağlayıcısına daha fazla bilgi geçirmek için kullandığı bir nesnedir. Bu durumda, sağlayıcıya kısmi örnek güncelleştirmelerini kabul etmelerini bildirmek için IWbemContext nesnesini kullanıyorsunuz.

  2. IWbemContext::SetValueçağrısıyla IWbemContext nesnesine "__PUT_EXTENSIONS" ve "__PUT_EXT_CLIENT_REQUEST" adlı değerleri ekleyin.

    Aşağıdaki tabloda "__PUT_EXTENSIONS" ve "__PUT_EXT_CLIENT_REQUEST" anlamları listelenmiştir.

    Adlandırılmış değer Açıklama
    "__PUT_EXTENSIONS" VT_BOOLVARIANT_TRUEolarak ayarlandı. Bir veya daha fazla diğer bağlam değerinin belirtildiğini belirten bir değer. Bu, kısmi örnek güncelleştirmelerinin kullanılıp kullanılmadığını saptamak için sağlayıcı içindeki bağlam nesnesinin hızlı bir şekilde denetlenmesini sağlar.
    "__PUT_EXT_CLIENT_REQUEST" VT_BOOLVARIANT_TRUEolarak ayarlanır. İlk istek sırasında istemci tarafından ayarlanır. Bu değer, yeniden giriş hatalarını önlemek için kullanılır.

     

  3. __PUT_EXT_STRICT_NULLS, __PUT_EXT_PROPERTIES veya __PUT_EXT_ATOMIC'ı ihtiyaç halinde herhangi bir kombinasyonla IWbemContext nesnesine başka bir çağrıyla IWbemContext::SetValueekleyin.

    Aşağıdaki tabloda adlandırılmış değerlerin anlamı listelenmiştir.

    Adlandırılmış değer Açıklama
    "__PUT_EXT_STRICT_NULLS" VT_BOOLVARIANT_TRUEolarak ayarlanır. İstemcinin özellikleri kasıtlı olarak VT_NULL olarak ayarladığını ve yazma işleminin başarılı olmasını beklediğini gösterir. Sağlayıcı değerleri NULL olarak ayarlayamıyorsa bir hata bildirilmelidir.
    __PUT_EXT_PROPERTIES güncellenecek özellik adlarının listesini içeren SAFEARRAY dizeler . Tek başına veya "__PUT_EXT_PROPERTIES" ile birlikte kullanılabilir. Değerler, yazılmakta olan örnektedir.
    "__PUT_EXT_ATOMIC" VT_BOOLVARIANT_TRUEolarak ayarlanır. Tüm güncelleştirmelerin aynı anda başarılı olması gerektiğini (atomik semantik) veya sağlayıcının geri dönmesi gerektiğini gösterir. Kısmi bir başarı olamaz. Tek başına veya diğer bayraklarla birlikte kullanılabilir.

     

  4. iFlags parametresini WBEM_FLAG_UPDATE_ONLYolarak ayarlayın. Bu bayrak olmadan çağrı geçersiz bir bağlamla başarısız olur.

  5. IWbemContext bağlam nesnesini IWbemServices::PutInstance veya IWbemServices::PutInstanceAsync çağrılarının pCtx parametresine geçirin.

    IWbemContext nesnesinin geçirilmesi, sağlayıcıya kısmi instans güncellemelerine izin verme talimatı verir. Tam örnek güncelleştirmesinde, pCtx'i NULLolarak ayarlayabilirsiniz.

    Çağrıda bulunan bağlam nesnesi "__PUT_EXTENSIONS" içermiyorsa sağlayıcı gerekli özellikleri yazabilir. Bağlam nesnesinde "__PUT_EXTENSIONS" varsa, WMI sağlayıcıdan ya işlemin semantiğine tam olarak uymasını ya da başka bir seçenek olarak çağrının başarısız olmasını ister. Daha fazla bilgi için bkz. Sağlayıcıda Erişim Reddedilen İletileri İşleme.