Mengambil Kelas WMI

Jenis objek pertama yang dapat Anda ambil adalah kelas WMI. Saat mengambil kelas WMI, Anda benar-benar mengambil definisi kelas, yang merupakan daftar properti, kualifikasi, dan metode yang sepenuhnya menggambarkan kelas. Namun, definisi kelas pada dasarnya adalah kelas itu sendiri.

PowerShell menggunakan kueri standar untuk mengambil definisi kelas, menggunakan kelas meta_class .

Untuk mengambil definisi kelas di PowerShell

  • Gunakan Get-WmiObject dengan kueri untuk meta_class, dengan klausa WHERE yang berisi nama kelas yang Anda gunakan untuk mengambil.

    Get-WmiObject -query "SELECT * FROM meta_class WHERE __class = 'Win32_LogicalDisk'"
    

    Get-WmiObject adalah cmdlet standar yang digunakan PowerShell untuk mengambil informasi kelas dan instans dari WMI. Kelas meta_class menentukan kueri sebagai kueri skema. Tanpa kelas meta_class , kueri ini akan mengembalikan semua instans Win32_LogicalDisk. Untuk informasi selengkapnya tentang mengkueri WMI, lihat Pernyataan SELECT untuk Kueri Skema.

Proses saat ini untuk mengambil definisi WMI di C# adalah menggunakan kelas CIMInstance .

Untuk mengambil definisi kelas di C# (Microsoft.Management.Infrastructure)

  1. Dengan menggunakan namespace Layanan Microsoft.Management.Infrastructure , buat kelas CIMInstance dengan namespace layanan dan nama kelas yang ditentukan.

    Kelas yang dibuat akan berisi semua informasi kelas, tetapi tidak ada data instans.

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string className = "Win32_LogicalDisk";
    
    CimInstance diskDrive = new CimInstance(className, Namespace);
    
  2. Sebagai alternatif, seperti halnya PowerShell, Anda juga dapat melakukan kueri, menggunakan tag meta_class sebagai bagian dari kueri.

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string diskDriveQuery = "SELECT * FROM meta_class WHERE __class = 'Win32_LogicalDisk'";
    
    CimSession mySession = CimSession.Create("localhost");
    IEnumerable<CimInstance> queryInstance = mySession.QueryInstances(Namespace, "WQL", diskDriveQuery);
    

Seperti halnya PowerShell, C# menggunakan kueri meta_class untuk mengambil definisi kelas. Secara bergantian, Anda dapat membuat objek ManagementClass untuk mengakses definisi kelas secara langsung.

Catatan

System.Management adalah namespace .NET asli yang digunakan untuk mengakses WMI; namun, API di namespace ini umumnya lebih lambat dan tidak menskalakan juga relatif terhadap rekan-rekan Microsoft.Management.Infrastructure yang lebih modern.

 

Untuk mengambil definisi kelas di C# (System.Management)

  1. Anda dapat menggunakan ManagementObjectSerarcher dengan kueri untuk meta_class, dengan klausa WHERE yang berisi nama kelas yang ingin Anda ambil.

    using System.Management;
    ...
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM meta_class WHERE __class = 'Win32_LogicalDisk'");
    ManagementObjectCollection myDiskCollection = searcher.Get();
    

    ManagementObjectSerarcher adalah kelas standar yang digunakan .NET untuk mengambil informasi kelas dan instans dari WMI. ManagementObjectSerarcher.Get mengembalikan ManagementObjectCollection yang berisi kelas definisi skema. Kelas meta_class menentukan kueri sebagai kueri skema. Tanpa kelas meta_class , kueri ini akan mengembalikan semua instans Win32_LogicalDisk. Untuk informasi selengkapnya tentang mengkueri WMI, lihat Pernyataan SELECT untuk Kueri Skema.

  2. Secara bergantian, buat objek ManagementClass baru, dengan nama sebagai jalur, untuk mengambil kelas .

    using System.Management;
    ...
    ManagementClass objInst = new ManagementClass("Win32_LogicalDisk");
    

Anda dapat mengambil definisi kelas di VBScript dengan cara yang sama untuk mengambil instans tertentu.

Untuk mengambil definisi kelas di VBScript

  1. Panggil SWbemServices.Get tetapi tidak mengidentifikasi instans tertentu di jalur objek untuk kelas .

  2. Contoh kode berikut mengambil definisi kelas untuk kelas yang menjelaskan drive logis di komputer Anda.

    Set objinst = GetObject("WinMgmts:Win32_LogicalDisk")
    

    Windows Script Host (WSH) juga mendukung hal berikut.

    <OBJECT id="myLocator" progid="WbemScripting.SWbemLocator"></OBJECT>
    

    Pada Halaman Server Aktif (ASP) gunakan GetObject atau CreateObject di skrip sisi server. Untuk informasi selengkapnya, lihat Membuat Halaman Server Aktif untuk WMI.

  3. Kelas atau instans juga dapat ditentukan, dalam hal ini objek yang dikembalikan adalah objek WMI, misalnya, instans Win32_LogicalDisk, bukan objek layanan. Perhatikan bahwa Anda tidak dapat menggunakan fungsi VBScript GetObject untuk membuat instans objek generik SWbemObject.

  4. Di halaman HTML yang berjalan di Microsoft Internet Explorer (IE), GetObject dan CreateObject bisa gagal karena objek skrip WMI, seperti kontrol ActiveX, tidak ditandai sebagai aman untuk pembuatan skrip. Satu pengecualian adalah objek SWbemDateTime . Satu-satunya cara agar panggilan ini berhasil adalah ketika Anda menurunkan pengaturan keamanan IE, yang tidak disarankan.

Saat mengambil kelas di C++, panggil GetObject versi IWbemServices.

Untuk mengambil definisi kelas di C++

  1. Panggil metode IWbemServices::GetObject atau IWbemServices::GetObjectAsync untuk mengambil definisi kelas.
  2. Satu kelas dapat memiliki beberapa definisi kelas, yang biasanya terjadi ketika Anda memiliki lebih dari satu penyedia kelas yang dimuat ke dalam satu namespace layanan. Ketika kelas memiliki beberapa definisi kelas, WMI mengembalikan definisi pertama yang ditemukan dan kode status WBEM_S_DUPLICATE_OBJECTS .

Karena GetObject mengembalikan definisi kelas, biasanya digunakan sebagai langkah pertama dalam membuat instans. Untuk informasi selengkapnya tentang cara menggunakan GetObject, lihat Membuat dan Mendeklarasikan Instans Menggunakan C++.