Aracılığıyla paylaş


WMI Yöntemini Çağırma

WMI, COM API'si ve betik API'si'te bilgi almak veya bir kuruluş sistemindeki nesneleri işlemek için yöntemler sağlar. Örneğin, WMI betik yöntemi SWbemServices.ExecQuery veriler için sorgular. Sağlayıcılar ayrıca kaydettikleri sınıflarda tanımlanmış yöntemlere de sahiptir. ChkdskWin32_LogicalDisk yöntemleri ve Win32 sağlayıcısıtarafından sağlanan ScheduleAutoChkörnekleri verilmiştir.

Bu konuda aşağıdaki bölümler ele alınmıştır:

Sağlayıcı Yöntemleriyle Karşılaştırıldığında WMI Yöntemleri

WMI yöntemini çağrıları sağlayıcı yöntemi çağrılarıyla birleştirerek, kuruluşunuzla ilgili bilgileri alabilir ve işleyebilirsiniz. Daha fazla bilgi için bkz. WMI yöntemi çağırma ve sağlayıcı yöntemini çağırma.

WMI betik oluşturma nesnesi 'in SWbemObject yöntemleri, herhangi bir WMI veri sınıfına uygulanabildikleri için özel bir statüye sahiptir. Daha fazla bilgi için bkz. SWbemObject ile betik oluşturma.

Aşağıdaki kod örneği hem WMI hem de sağlayıcı yöntemlerini çağırır.

Aşağıdaki WMI ve sağlayıcı yöntemleri Betik API'sinde WMIiçin bulunur.

Win32_Serviceiçin İade Kodları bölümünde "Return" içinde görünebilen kodu arayabilirsiniz.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service where Name='Alerter'")
For Each objService in colServices
    Return = objService.StopService()
    If Return <> 0 Then
        Wscript.Echo "Failed " &VBNewLine & "Error code = " & Return 
    Else
       WScript.Echo "Succeeded"
    End If
Next

$colServices= Get-WmiObject -Class Win32_Service -Filter 'Name = "Alerter"'
foreach ($objService in $colServices)
{
    $objService.StopService()
}

WMI'da Method-Calling Modları

Yarı zaman uyumsuz çağrı modu genellikle güvenlik ve performans arasında en iyi dengeyi sağlar.

Olası modların her biri hakkında daha fazla bilgi için aşağıdakilere bakın:

Eşzamanlı Mod

Program veya betikler yöntem çağrısı bir SWbemObjectSet koleksiyon nesnesi döndürene kadar duraklatıldığında zaman uyumlu mod oluşur. WMI, koleksiyon nesnesini çağıran programa veya betike döndürmeden önce bu koleksiyonu bellekte oluşturur.

Senkron mod, program veya betiğin performansı üzerinde, programı veya betiği çalıştıran bilgisayarda olumsuz bir etkiye sahip olabilir. Örneğin, olay günlüğünden binlerce olayın zaman uyumlu bir şekilde alınması uzun sürebilir ve çok fazla bellek kullanabilir çünkü WMI her olaydan bir nesne oluşturur ve koleksiyonu yönteme geçirmeden önce bu nesneleri bir koleksiyona yerleştirir.

Yalnızca zaman uyumlu modda büyük veri kümeleri döndürmeyen yöntemleri çağırmanız gerekir. Aşağıdaki SWbemServices yöntemleri zaman uyumlu modda güvenle çağrılabilir:

SWbemServices yöntemleri, adı 'Async' sözcüğünü içermeyen, iFlags parametresinde wbemFlagReturnWhenComplete değeri ayarlanarak senkron modda çağrılabilir.

Asenkron Mod

Zaman uyumsuz mod, program veya betik bir yöntemi çağırdıktan sonra çalışmaya devam ettiğinde gerçekleşir. WMI, her bir nesne oluşturuldukça, yöntemden tüm nesneleri bir SWbemSink nesnesine döndürür. Çağıran program veya betik, döndürülen nesneleri işlemek için bir SWbemSink nesnesine ve SWbemSink.OnObjectReady olay işleyicisine sahip olmalıdır. Asenkron mod için bir olay işleyicisi oluşturma hakkında daha fazla bilgi için bkz. WMI OlayAlma.

Bu mod zaman uyumlu modun performansına ve kaynak cezasına sahip olmasa da, SWbemSink nesnesinde depolanan sonuçlar çağıran programdan veya betikten gelemediğinden zaman uyumsuz mod ciddi güvenlik riskleri oluşturabilir. WMI, yöntem başarılı olana kadar SWbemSink nesnesinde kimlik doğrulama düzeyini düşürür. Bu güvenlik risklerini azaltma hakkında daha fazla bilgi için bkz. Zaman Uyumsuz Çağrıda Güvenliği Ayarlama.

Async sözcüğüyle eklenen yöntemler, zaman uyumsuz moda yönelik yöntemlerdir. Aşağıdaki yöntemler zaman uyumsuz çağrılardır:

Zaman uyumsuz mod hakkında daha fazla bilgi için bkz:

Yarı Senkron Mod

Yarı eşzamanlı mod, program veya betik yöntemi çağrıldıktan sonra çalışmaya devam ettiği için, zaman uyumsuz mod ile benzerlik gösterir. Yarı eşzamanlı modda, betiğiniz veya programınız çalışmaya devam ederken WMI nesneleri arka planda alır. WMI, nesne oluşturulduktan hemen sonra çağıran yönteme döndürülen her nesneyi döndürür.

WMI nesneyi yönettiğinden, yarı eşzamanlı mod asenkron moddan daha güvenlidir. Ancak, 1.000'den fazla örnekle yarı eşzamanlı mod kullanırsanız, örnek alma kullanılabilir kaynakları tekeline alabilir ve bu da programın veya betiğin ve bunların kullanıldığı bilgisayarın performansını düşürebilir. Her nesne, bellek serbest bırakılana kadar gerekli kaynakları alır.

Bu durumu aşmak için, iFlags parametresi ile wbemFlagForwardOnly ve wbemFlagReturnImmediately bayraklarını ayarlayarak yöntemi çağırabilir ve WMI'yi yalnızca ileriye doğru SWbemObjectSetdöndürmesi için yönlendirebilirsiniz. Yalnızca ileri yönlü SWbemObjectSet , nesne numaralandırıldıktan sonra belleği serbest bırakarak büyük bir veri kümesinin neden olduğu performans sorununu ortadan kaldırır.

Eşzamanlı veya eşzamansız modda çalıştırılamayan SWbemServices yöntemleri, yarı eşzamansız modda çalıştırılır.

Aşağıdaki yöntemler yarı eşzamanlı modda çağrılır:

Yarı eşzamanlı mod hakkında daha fazla bilgi için bkz. C++ ile Yarı Eşzamanlı Çağrı Yapma ve VBScript ile Yarı Eşzamanlı Çağrı Yapma.

Numaralandırma Performansını İyileştirme

SWbemObject ile Betik Yazma

WbemFlagEnum