- WMI 采集主板/BIOS/显卡/内存/CPU/硬盘等 11 类设备 + 变更比对 - 新增依赖 gopsutil/yusufpapurcu/wmi, 附测试、例程与 README
139 lines
3.5 KiB
Go
139 lines
3.5 KiB
Go
//go:build windows
|
|
|
|
package hardware
|
|
|
|
import (
|
|
"github.com/yusufpapurcu/wmi"
|
|
)
|
|
|
|
// https://learn.microsoft.com/zh-cn/windows/win32/cimwin32prov/computer-system-hardware-classes
|
|
|
|
// GetBaseBoardInfo 主板信息
|
|
func GetBaseBoardInfo() ([]BaseBoard, error) {
|
|
info := make([]BaseBoard, 0)
|
|
err := wmi.Query("SELECT * FROM Win32_BaseBoard WHERE (Product IS NOT NULL)", &info)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
// GetBiosInfo BIOS信息
|
|
func GetBiosInfo() ([]Bios, error) {
|
|
info := make([]Bios, 0)
|
|
err := wmi.Query("SELECT * FROM Win32_BIOS WHERE (Name IS NOT NULL)", &info) // WHERE (BIOSVersion IS NOT NULL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
// GetVideoControllerInfo 显卡信息
|
|
func GetVideoControllerInfo() ([]VideoController, error) {
|
|
info := make([]VideoController, 0)
|
|
err := wmi.Query("SELECT * FROM Win32_VideoController WHERE (Name IS NOT NULL)", &info) // WHERE (BIOSVersion IS NOT NULL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
// GetPhysicalMemoryInfo 物理内存
|
|
func GetPhysicalMemoryInfo() ([]PhysicalMemory, error) {
|
|
info := make([]PhysicalMemory, 0)
|
|
err := wmi.Query("SELECT * FROM Win32_PhysicalMemory", &info)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
// GetProcessorInfo 处理器
|
|
func GetProcessorInfo() ([]Processor, error) {
|
|
info := make([]Processor, 0)
|
|
err := wmi.Query("SELECT * FROM Win32_Processor", &info)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
// GetDiskDriveInfo 硬盘
|
|
func GetDiskDriveInfo() ([]DiskDrive, error) {
|
|
info := make([]DiskDrive, 0)
|
|
err := wmi.Query("SELECT * FROM Win32_DiskDrive", &info)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
// GetSoundDeviceInfo 声卡
|
|
func GetSoundDeviceInfo() ([]SoundDevice, error) {
|
|
info := make([]SoundDevice, 0)
|
|
err := wmi.Query("SELECT * FROM Win32_SoundDevice", &info)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
// GetNetworkAdapterInfo 网卡
|
|
func GetNetworkAdapterInfo() ([]NetworkAdapter, error) {
|
|
info := make([]NetworkAdapter, 0)
|
|
err := wmi.Query("SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = TRUE", &info)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
// GetDesktopMonitorInfo 显示器
|
|
func GetDesktopMonitorInfo() ([]DesktopMonitor, error) {
|
|
info := make([]DesktopMonitor, 0)
|
|
err := wmi.Query("SELECT * FROM Win32_DesktopMonitor", &info)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
// GetPointingDeviceInfo 鼠标
|
|
func GetPointingDeviceInfo() ([]PointingDevice, error) {
|
|
info := make([]PointingDevice, 0)
|
|
err := wmi.Query("SELECT * FROM Win32_PointingDevice", &info)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
// GetKeyboardInfo 键盘
|
|
func GetKeyboardInfo() ([]Keyboard, error) {
|
|
info := make([]Keyboard, 0)
|
|
err := wmi.Query("SELECT * FROM Win32_Keyboard", &info)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return info, nil
|
|
}
|
|
|
|
// GetHardwareInfo 通过 WMI 采集整机硬件信息
|
|
func GetHardwareInfo() (Hardware, error) {
|
|
hardware := Hardware{}
|
|
|
|
hardware.BaseBoard, _ = GetBaseBoardInfo()
|
|
hardware.Bios, _ = GetBiosInfo()
|
|
hardware.VideoController, _ = GetVideoControllerInfo()
|
|
hardware.PhysicalMemory, _ = GetPhysicalMemoryInfo()
|
|
hardware.Processor, _ = GetProcessorInfo()
|
|
hardware.DiskDrive, _ = GetDiskDriveInfo()
|
|
hardware.SoundDevice, _ = GetSoundDeviceInfo()
|
|
hardware.NetworkAdapter, _ = GetNetworkAdapterInfo()
|
|
hardware.DesktopMonitor, _ = GetDesktopMonitorInfo()
|
|
hardware.PointingDevice, _ = GetPointingDeviceInfo()
|
|
hardware.Keyboard, _ = GetKeyboardInfo()
|
|
|
|
return hardware, nil
|
|
}
|