WMI(Windows Management Instrumentation)是一种用于管理和监控Windows操作系统的技术和接口。它提供了一种标准化的方式来获取和操作Windows操作系统的各种系统信息、配置设置、性能数据和事件日志等。
通过WMI,开发人员可以使用各种编程语言(如C#, VB.NET, PowerShell)来查询和修改操作系统的各种属性和状态。WMI通过提供一组对象模型和命名空间来表示操作系统中的各个组件和功能,开发人员可以使用这些对象和命名空间来访问和操作系统中的各种资源。
使用WMI,开发人员可以执行诸如以下操作:
- 查询系统信息:获取操作系统版本、计算机硬件配置、网络设置等信息。
- 监控系统性能:获取CPU、内存、磁盘和网络等资源的使用情况和性能指标。
- 管理进程和服务:启动、停止、查询和控制正在运行的进程和服务。
- 配置和管理设备:查询和配置硬件设备的属性和状态。
- 处理事件和日志:订阅和处理系统事件和日志消息。
WMI提供了一种强大而灵活的方式来管理和监控Windows操作系统,使开发人员能够编写自动化脚本、系统管理工具和监控应用程序,从而简化管理任务、提高效率并实现系统的自动化管理。
如下代码定义了一个名为HardWareInfo
的类,该类包含了一些静态方法用于获取硬件信息。
-
GetCpuId
方法用于获取CPU的ID,通过使用ManagementObjectSearcher
类和WMI查询,获取计算机的处理器信息,然后提取出处理器的ID作为CPUID。 -
GetDiskSerialNumber
方法用于获取硬盘的序列号,使用ManagementObjectSearcher
类和WMI查询,获取计算机的硬盘驱动器信息,然后提取出序列号作为硬盘序列号。 -
GetDiskModelNumber
方法用于获取硬盘的产品型号,同样使用ManagementObjectSearcher
类和WMI查询,获取硬盘驱动器信息,然后提取出型号作为硬盘产品型号。 -
GetMacAddress
方法用于获取网卡的MAC地址,通过查询网络适配器配置信息,找到启用IP的网卡,并提取出MAC地址。 -
GetIpAddress
方法用于获取本机的IP地址,同样通过查询网络适配器配置信息,找到启用IP的网卡,并提取出IP地址。 -
GetBIOSSerialNumber
方法用于获取主板的序列号,使用ManagementObjectSearcher
类和WMI查询,获取主板的BIOS信息,然后提取出序列号作为主板序列号。
这些方法使用了ManagementObjectSearcher
类和WMI查询来获取硬件信息,然后通过属性值的提取来获得具体的信息。请注意,这些方法可能需要管理员权限才能访问某些敏感信息。
class HardWareInfo
{
/// <summary>
/// 获取 CPUID , 更多 cpu 信息参考
/// </summary>
/// <returns> cpuid </returns>
public static string GetCpuId()
{
string cpuid = "";
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Processor");
foreach (ManagementObject mo in searcher.Get())
{
cpuid = mo.Properties["ProcessorId"].Value.ToString();
break;
}
}
catch
{
}
return cpuid;
}
/// <summary>
/// 获取硬盘序列号
/// </summary>
/// <returns> 硬盘序列号 </returns>
public static string GetDiskSerialNumber()
{
string HDid = "";
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_DiskDrive");
foreach (ManagementObject mo in searcher.Get())
{
HDid = (string)mo.Properties["SerialNumber"].Value;
break;
}
}
catch
{
}
return HDid;
}
/// <summary>
/// 获取硬盘产品型号
/// </summary>
/// <returns>硬盘产品型号</returns>
public static string GetDiskModelNumber()
{
string HDid = "";
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_DiskDrive");
foreach (ManagementObject mo in searcher.Get())
{
HDid = (string)mo.Properties["Model"].Value;
break;
}
}
catch
{
}
return HDid;
}
/// <summary>
/// 获取 Mac 地址 ,更多网卡信息参考 :
/// </summary>
/// <returns> Mac 地址 </returns>
public static string GetMacAddress()
{
string mac = "";
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_NetworkAdapterConfiguration");
foreach (ManagementObject mo in searcher.Get())
{
if ((bool)mo["IPEnabled"] == true)
{
mac = mo["MacAddress"].ToString();
break;
}
}
}
catch
{
}
return mac;
}
/// <summary>
/// 获取 ip 地址
/// </summary>
/// <returns> ip 地址 </returns>
public static string GetIpAddress()
{
string st = "";
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_NetworkAdapterConfiguration");
foreach (ManagementObject mo in searcher.Get())
{
if ((bool)mo["IPEnabled"] == true)
{
System.Array ar;
ar = (System.Array)(mo.Properties["IpAddress"].Value);
st = ar.GetValue(0).ToString();
break;
}
}
}
catch
{
}
return st;
}
/// <summary>
/// 获取主板序列号
/// </summary>
/// <returns> 主板序列号 </returns>
public static string GetBIOSSerialNumber()
{
string sBIOSSerialNumber = "";
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_BIOS");
foreach (ManagementObject mo in searcher.Get())
{
sBIOSSerialNumber = mo.GetPropertyValue("SerialNumber").ToString().Trim();
break;
}
}
catch
{
}
return sBIOSSerialNumber;
}
}