Metode SWbemServices.ExecQuery

Metode ExecQuery dari objek SWbemServices menjalankan kueri untuk mengambil objek. Objek ini tersedia melalui koleksi SWbemObjectSet yang dikembalikan.

Metode ini dipanggil dalam mode semisinkron. Untuk informasi selengkapnya, lihat Memanggil Metode.

Untuk penjelasan tentang sintaks ini, lihat Konvensi Dokumen untuk Scripting API.

Sintaks

objWbemObjectSet = .ExecQuery( _
  ByVal strQuery, _
  [ ByVal strQueryLanguage ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ] _
)

Parameter

strQuery

Wajib diisi. String yang berisi teks kueri. Parameter ini tidak boleh kosong. Untuk informasi selengkapnya tentang membangun string kueri WMI, lihat Mengkueri dengan WQL dan referensi WQL .

strQueryLanguage [opsional]

String yang berisi bahasa kueri yang akan digunakan. Jika ditentukan, nilai ini harus "WQL".

iFlags [opsional]

Bilangan bulat yang menentukan perilaku kueri dan menentukan apakah panggilan ini segera dikembalikan. Nilai default untuk parameter ini adalah wbemFlagReturnImmediately. Parameter ini dapat menerima nilai berikut.

wbemFlagForwardOnly (32 (0x20))

Menyebabkan enumerator hanya maju dikembalikan. Enumerator hanya penerusan umumnya jauh lebih cepat dan menggunakan lebih sedikit memori daripada enumerator konvensional, tetapi mereka tidak mengizinkan panggilan untuk SWbemObject.Clone_.

wbemFlagBidirectional (0 (0x0))

Menyebabkan WMI mempertahankan pointer ke objek enumerasi hingga klien merilis enumerator.

wbemFlagReturnImmediately (16 (0x10))

Menyebabkan panggilan untuk segera kembali.

wbemFlagReturnWhenComplete (0 (0x0))

Menyebabkan panggilan ini diblokir hingga kueri selesai. Bendera ini memanggil metode dalam mode sinkron.

wbemQueryFlagPrototype (2 (0x2))

Digunakan untuk membuat prototipe. Bendera ini menghentikan kueri terjadi dan mengembalikan objek yang terlihat seperti objek hasil umum.

wbemFlagUseAmendedQualifiers (131072 (0x20000))

Menyebabkan WMI mengembalikan data amandemen kelas dengan definisi kelas dasar. Untuk informasi selengkapnya, lihat Melokalisasi Informasi Kelas WMI.

objWbemNamedValueSet [opsional]

Biasanya, ini tidak ditentukan. Jika tidak, ini adalah objek SWbemNamedValueSet yang elemennya mewakili informasi konteks yang dapat digunakan oleh penyedia yang melayani permintaan. Penyedia yang mendukung atau memerlukan informasi tersebut harus mendokumentasikan nama nilai yang dikenali, jenis data nilai, nilai yang diizinkan, dan semantik.

Nilai kembali

Jika tidak ada kesalahan yang terjadi, metode ini mengembalikan objek SWbemObjectSet . Ini adalah kumpulan objek yang berisi kumpulan hasil kueri. Pemanggil dapat memeriksa koleksi menggunakan implementasi koleksi untuk bahasa pemrograman yang Anda gunakan. Untuk informasi selengkapnya, lihat Mengakses Koleksi.

Kode kesalahan

Setelah penyelesaian metode ExecQuery , objek Err dapat berisi salah satu kode kesalahan dalam daftar berikut.

wbemErrAccessDenied - 2147749891 (0x80041003)

Pengguna saat ini tidak memiliki izin untuk melihat tataan hasil.

wbemErrFailed - 2147749889 (0x80041001)

Kesalahan yang tidak ditentukan.

wbemErrInvalidParameter - 2147749896 (0x80041008)

Parameter tidak valid ditentukan.

wbemErrInvalidQuery - 2147749911 (0x80041017)

Sintaks kueri tidak valid.

wbemErrInvalidQueryType - 2147749912 (0x80041018)

Bahasa kueri yang diminta tidak didukung.

wbemErrOutOfMemory - 2147749894 (0x80041006)

Tidak cukup memori untuk menyelesaikan operasi.

Keterangan

ExecQuery adalah salah satu panggilan yang paling umum digunakan untuk mengambil informasi WMI. Panggilan standar ke ExecQuery terlihat seperti berikut ini:

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

Perhatikan bahwa Anda membuat objek SWbemServices dengan moniker yang mewakili namespace dan keamanan yang sesuai, lalu melakukan panggilan ExecQuery melalui layanan. Untuk diskusi yang lebih lengkap, lihat Membuat Skrip WMI dan Menghitung WMI.

Seperti metode InstancesOf , metode ExecQuery selalu mengembalikan koleksi SWbemObjectSet . Dengan demikian skrip WMI Anda harus menghitung koleksi yang dikembalikan ExecQuery untuk mengakses setiap instans sumber daya terkelola dalam koleksi, seperti yang ditunjukkan di sini:

strComputer = "."
Set objSWbemServices = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colSWbemObjectSet = objSWbemServices.ExecQuery _
   ("SELECT * FROM Win32_Service")
For Each objSWbemObject In colSWbemObjectSet
    Wscript.Echo "Name: " & objSWbemObject.Name
Next

Metode SWbemServices lain yang mengembalikan SWbemObjectSet termasuk AssociatorsOf, ReferencesTo, dan SubclassesOf.

Ini bukan kesalahan bagi kueri untuk mengembalikan tataan hasil kosong. Metode ExecQuery mengembalikan properti kunci apakah properti kunci diminta atau tidak dalam argumen strQuery . Jika terjadi kesalahan saat menjalankan metode ini dan Anda tidak menggunakan bendera wbemFlagReturnImmediately , objek Err tidak diatur sampai Anda mencoba mengakses kumpulan objek yang dikembalikan. Namun, jika Anda menggunakan bendera wbemFlagReturnWhenComplete , objek Err diatur ketika metode ExecQuery dipanggil.

Ada batasan jumlah kata kunci AND dan OR yang dapat digunakan dalam kueri WQL. Sejumlah besar kata kunci WQL yang digunakan dalam kueri kompleks dapat menyebabkan WMI mengembalikan kode kesalahan WBEM_E_QUOTA_VIOLATION sebagai nilai HRESULT . Batas kata kunci WQL tergantung pada seberapa kompleks kuerinya.

Contoh

Contoh kode VBScript berikut menemukan semua drive disk di komputer lokal dan menampilkan ID perangkat dan jenis disk drive.

Set colDisks = GetObject( _
    "Winmgmts:").ExecQuery("Select * from Win32_LogicalDisk")
For Each objDisk in colDisks
 
    Select Case objDisk.DriveType
        Case 1
            Wscript.Echo "No root directory. Drive type could not be determined."
        Case 2
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Removable drive" 
        Case 3
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Local hard disk" 
        Case 4
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Network disk" 
        Case 5
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Compact disk" 
        Case 6
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = RAM disk" 
        Case Else
            Wscript.Echo "Drive type could not be determined."
    End Select
Next

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung
Windows Vista
Server minimum yang didukung
Windows Server 2008
Header
Wbemdisp.h
Pustaka jenis
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

Lihat juga

SWbemServices

SWbemServices.Get

Mengkueri dengan WQL

Membuat Skrip WMI

Menghitung WMI