Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menyoal Instrumentasi Pengurusan Windows (WMI) daripada Go Menggunakan COM?

Bagaimanakah Saya Boleh Menyoal Instrumentasi Pengurusan Windows (WMI) daripada Go Menggunakan COM?

Linda Hamilton
Linda Hamiltonasal
2024-12-22 02:31:14895semak imbas

How Can I Query Windows Management Instrumentation (WMI) from Go Using COM?

Menyiasat WMI daripada Go Menggunakan COM

Dalam bidang pentadbiran Windows, menanya Windows Management Instrumentation (WMI) ialah tugas yang penting. Bagi mereka yang mencari cara untuk mencapai perkara ini dari dalam Go, penyelesaian berikut menyediakan pendekatan mudah menggunakan COM.

Mattn, penyumbang di GitHub, telah mencipta pembungkus mudah yang memudahkan proses. Menggunakan pembungkus ini bersama-sama pengendalian ralat yang diperlukan, berikut ialah program contoh:

import (
    "github.com/mattn/go-ole"
    "github.com/mattn/go-ole/oleutil"
)

func main() {
    // Initialize and later uninitialize COM
    ole.CoInitialize(0)
    defer ole.CoUninitialize()

    // Create WbemScripting.SWbemLocator object
    unknown, _ := oleutil.CreateObject("WbemScripting.SWbemLocator")
    defer unknown.Release()

    // Obtain SWbemServices object
    wmi, _ := unknown.QueryInterface(ole.IID_IDispatch)
    defer wmi.Release()
    serviceRaw, _ := oleutil.CallMethod(wmi, "ConnectServer")
    service := serviceRaw.ToIDispatch()
    defer service.Release()

    // Execute WMI query
    resultRaw, _ := oleutil.CallMethod(service, "ExecQuery", "SELECT * FROM Win32_Process")
    result := resultRaw.ToIDispatch()
    defer result.Release()

    // Gather process names
    countVar, _ := oleutil.GetProperty(result, "Count")
    count := int(countVar.Val)
    for i := 0; i < count; i++ {
        itemRaw, _ := oleutil.CallMethod(result, "ItemIndex", i)
        item := itemRaw.ToIDispatch()
        defer item.Release()
        asString, _ := oleutil.GetProperty(item, "Name")
        println(asString.ToString())
    }
}

Dalam kod ini, operasi kritikal ialah panggilan ke ExecQuery, yang mendapatkan semula data WMI yang dikehendaki. Sebagai contoh, kami mendapatkan semula nama proses yang sedang berjalan. Menjalankan program ini harus menghasilkan senarai proses aktif pada sistem anda.

Penyelesaian ini memanfaatkan kuasa COM, teknologi warisan dari awal pengaturcaraan berorientasikan objek dalam C. Walaupun ia mungkin bukan yang paling pendekatan moden, ia menyediakan cara yang stabil dan boleh dipercayai untuk berinteraksi dengan WMI daripada Go.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyoal Instrumentasi Pengurusan Windows (WMI) daripada Go Menggunakan COM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn