获取主机信息

最近需要做一个配合集控系统收集各个终端设备的一些信息,大致需要收集终端设备的硬件信息,CPU、内存以及硬盘使用率等信息。网上查看了一番,使用WMI来获取这些信息是最方便的。实现代码如下:

 Models.PlatformInfo platformInfo = new Models.PlatformInfo();
string query = "Select * from {0}";
///获取操作系统数据
SelectQuery queryOS = new SelectQuery(string.Format(query, WindowAPIType.Win32_OperatingSystem));
ManagementObjectSearcher searcher = new ManagementObjectSearcher(queryOS);
foreach (ManagementBaseObject os in searcher.Get())
{
platformInfo.Version = Convert.ToString(os["Version"]);
platformInfo.Caption = Convert.ToString(os["Caption"]);
platformInfo.SerialNumber = Convert.ToString(os["SerialNumber"]);
platformInfo.SystemDirectory = Convert.ToString(os["SystemDirectory"]);
platformInfo.OSArchitecture = Convert.ToString(os["OSArchitecture"]);
platformInfo.InstallDate = Convert.ToString(os["InstallDate"]);
platformInfo.Organization = Convert.ToString(os["Organization"]);
}

其中可以使用os.GetText(TextFormat.Mof);来获取详细的信息。

目前我查到的可以获取的API接口有如下:

/// <summary>
/// Window Api名称
/// </summary>
public enum WindowAPIType
{
/// <summary>
/// 内存
/// </summary>
Win32_PhysicalMemory,
/// <summary>
/// CPU
/// </summary>
Win32_Processor,
/// <summary>
/// 硬盘
/// </summary>
Win32_DiskDrive,
/// <summary>
/// 电脑型号
/// </summary>
Win32_ComputerSystemProduct,
/// <summary>
/// 分辨率
/// </summary>
Win32_DesktopMonitor,
/// <summary>
/// 显卡细节
/// </summary>
Win32_VideoController,
/// <summary>
/// 操作系统
/// </summary>
Win32_OperatingSystem,
/// <summary>
/// 网络适配器
/// </summary>
Win32_NetworkAdapter,
/// <summary>
/// 网络适配器设置
/// </summary>
Win32_NetworkAdapterConfiguration,
/// <summary>
/// 操作系统登录
/// </summary>
Win32_ComputerSystem,
/// <summary>
/// 键盘
/// </summary>
Win32_Keyboard,
/// <summary>
/// 点输入设备,包括鼠标
/// </summary>
Win32_PointingDevice,
/// <summary>
/// 主板
/// </summary>
Win32_BaseBoard,
/// <summary>
/// BIOS芯片
/// </summary>
Win32_BIOS,
/// <summary>
/// 光盘驱动盘
/// </summary>
Win32_CDROMDrive,
/// <summary>
/// 并口
/// </summary>
Win32_ParallelPort,
/// <summary>
/// 串口
/// </summary>
Win32_SerialPort,
/// <summary>
/// 串口配置
/// </summary>
Win32_SerialPortConfiguration,
/// <summary>
/// 多媒体,一般指声卡
/// </summary>
Win32_SoundDevice,
/// <summary>
/// 主板插槽(ISA&PCI&AGP)
/// </summary>
Win32_SystemSlot,
/// <summary>
/// USB控制器
/// </summary>
Win32_USBController,
/// <summary>
/// 打印机
/// </summary>
Win32_Printer,
/// <summary>
/// 打印机设置
/// </summary>
Win32_PrinterConfiguration,
/// <summary>
/// 打印机任务
/// </summary>
Win32_PrintJob,
/// <summary>
/// 打印机端口
/// </summary>
Win32_TCPIPPrinterPort,
/// <summary>
/// Modem
/// </summary>
Win32_POTSModem,
/// <summary>
/// MODEM端口
/// </summary>
Win32_POTSModemToSerialPort,
/// <summary>
/// 显卡
/// </summary>
Win32_DisplayConfiguration,
/// <summary>
/// 显卡设置
/// </summary>
Win32_DisplayControllerConfiguration,
/// <summary>
/// 显示支持显示模式
/// </summary>
Win32_VideoSettings,
/// <summary>
/// 时区
/// </summary>
Win32_TimeZone,
/// <summary>
/// 驱动程序
/// </summary>
Win32_SystemDriver,
/// <summary>
/// 磁盘分区
/// </summary>
Win32_DiskPartition,
/// <summary>
/// 逻辑磁盘
/// </summary>
Win32_LogicalDisk,
/// <summary>
/// 逻辑磁盘所在分区及始末位置
/// </summary>
Win32_LogicalDiskToPartition,
/// <summary>
/// 逻辑内存配置
/// </summary>
Win32_LogicalMemoryConfiguration,
/// <summary>
/// 系统页文件信息
/// </summary>
Win32_PageFile,
/// <summary>
/// 页文件设置
/// </summary>
Win32_PageFileSetting,
/// <summary>
/// 系统启动配置
/// </summary>
Win32_BootConfiguration,
/// <summary>
/// 系统自动启动程序
/// </summary>
Win32_StartupCommand,
/// <summary>
/// 系统安装的服务
/// </summary>
Win32_Service,
/// <summary>
/// 系统管理组
/// </summary>
Win32_Group,
/// <summary>
/// 系统组账号
/// </summary>
Win32_GroupUser,
/// <summary>
/// 用户账户
/// </summary>
Win32_UserAccount,
/// <summary>
/// 系统进程
/// </summary>
Win32_Process,
/// <summary>
/// 系统线程
/// </summary>
Win32_Thread,
/// <summary>
/// 共享
/// </summary>
Win32_Share,
/// <summary>
/// 已安装的网络客户端
/// </summary>
Win32_NetworkClient,
/// <summary>
/// 已安装的网络协议
/// </summary>
Win32_NetworkProtocol,
}

查询都是一致的:"Select * from {0}"

这样就能获取到想要获取到的信息了。

获取开机时间:

/// <summary>
/// 获取开机运行时间
/// </summary>
/// <returns></returns>
public string GetRunTime()
{
TimeSpan ts = TimeSpan.FromMilliseconds(Environment.TickCount);
return ts.ToString();
}

获取CPU使用率可以使用性能计数器组件。

private PerformanceCounter performance = new PerformanceCounter("Processor", "% Processor Time", "_Total", true);

this.performance.MachineName = ".";
this.performance.NextValue(); /// <summary>
/// CPU使用率
/// </summary>
/// <returns></returns>
public string GetCPU()
{
return this.performance.NextValue().ToString("F1") + "%";
}

C#获取主机信息的更多相关文章

  1. Linux 网络编程基础(2)-- 获取主机信息

    前一篇已经介绍了最基本的网络数据结构.这篇介绍一下获取主机信息的函数 举个例子,想要通过代码的方式从百度获取当前的时间,怎么做?我们不知道百度的IP地址啊,这代码怎么写?还好,Linux提供了一些AP ...

  2. PHP通过ZABBIX API获取主机信息 VS 直接从数据库获取主机信息

    最近项目需要获取linux主机的一些信息,如CPU使用率,内存使用情况等.由于我们本身就装了zabbix系统,所以我只用知道如何获取信息即可,总结有两种方法可以获取. 一.通过ZABBIX API获取 ...

  3. 获取主机信息,网络信息AIP,getsockname,getpeername,getservbyname,getservbyport,inet_ntop,inet_pton

    获取主机信息 1.ip地址转换,主机字节序 <---> 网络字节序 #include <arpa/inet.h> int inet_pton(int af, const cha ...

  4. 【Java实用工具】——使用oshi获取主机信息

    最近在筹划做一个监控系统.其中就要获取主机信息,其中遇到一些问题.在此做个记录,以便以后查阅. 在该监控系统中,想要做到主机的CPU.内存.磁盘.网络.线程.JVM内存.JVM GC 等维度的监控,J ...

  5. paramiko获取主机信息

    import re import paramiko host="192.168.4.88" user = "root" password = " cl ...

  6. python 调用zabbix api实现查询主机信息,输出所有主机ip

    之前发现搜索出来的主机调用zabbix api信息都不是那么明确,后来通过zabbix官方文档,查到想要的api信息,随后写一篇自己这次项目中用到的api. #!/usr/bin/env python ...

  7. 02.将SDK获取到的ECS主机信息入库

    1.通过调用阿里SDK,将获取到的ECS信息存入数据库,如果不知道SDK怎么使用,查看:01.阿里云SDK调用,获取ESC主机详细信息 2.import aliSDK应用的是01.阿里云SDK调用,获 ...

  8. 使用gethostname()函数和gethostbyname()函数获取主机相关信息

    gethostname() : 返回本地主机的标准主机名. 原型如下: #include <unistd.h> int gethostname(char *name, size_t len ...

  9. 主机性能监控之wmi 获取磁盘信息

    标 题: 主机性能监控之wmi 获取磁盘信息作 者: itdef链 接: http://www.cnblogs.com/itdef/p/3990541.html 欢迎转帖 请保持文本完整并注明出处 仅 ...

随机推荐

  1. JAVA静态方法是否可以被继承

    结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏.原因:1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用.如 ...

  2. js判断某个字符串是否包含另一个字符串

    1.indexOf():推荐,可返回某个指定的字符串值在字符串中首次出现的位置.如果要检索的字符串值没有出现,则该方法返回 -1. var str = "123" console. ...

  3. C++多重继承实践

    实践代码如下: #include <iostream> using namespace std; class Animal { private: int hash; public: Ani ...

  4. 等式变换java解法

    输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立. 1 2 3 4 5 6 7 8 9 = X 比如: 12-34+5-67+89 = 5 1+23+4-5+6-7-8-9 ...

  5. Linux_Ubuntu命令概述

    1.命令使用方法 Linux命令格式: command [-options] [parameter1] … 说明: command: 命令名,相应功能的英文单词或单词的缩写 [-options]:选项 ...

  6. chrome浏览器爬虫WebDriverException解决采用python + selenium + chrome + headless模式

    WebDriverException: Message: unknown error: Chrome failed to start: crashed 第一种:如果出现下面情况: chrome浏览器有 ...

  7. CentOS 5.5 安装 64位 Oracle 10g

    参考官方文档(随着数据库文件一起下载) Oracle® DatabaseQuick Installation Guide 10gRelease 2 (10.2) for Linux x86-64 官方 ...

  8. OpenStack 虚拟机的磁盘文件类型与存储方式

    目录 文章目录 目录 虚拟机的磁盘文件类型 虚拟机磁盘文件的存放方式 QCOW2 镜像格式与 qemu-img 指令 参考文章 虚拟机的磁盘文件类型 Nova 虚拟机的虚拟磁盘主要包含有 Root D ...

  9. Elasticsearch 6.2.3版本 string 类型字段 排序 报错 Fielddata is disabled on text fields by default

    背景说明 最近在做一个 Elasticsearch 的分页查询,并且对查询结果按照特定字段进行排序的功能. 但是执行结果却报错,报错信息如下: { "error": { " ...

  10. 想使用 MongoDB ,你应该了解这8个方面!

    想使用 MongoDB ,你应该了解这8个方面! 应用性能高低依赖于数据库性能,MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解 ...