1.WMI简介

WMI是英文Windows Management Instrumentation的简写,通过使用WMI,我们可以获取本地或远程服务器的性能参数和进程运行情况,以及大部分硬件信息,但前提是运行的用户要有足够的权限,如administrator组用户等。这也是做负载均衡所需要且比较方便快捷的途径。

2.使用时首先添加System.Management.dll,然后引用using System.Management;

3.定义远程访问public

class

ManagementConnectPool

...

{

private

static

System.Management.ConnectionOptions Conn =

new

ConnectionOptions() ;

private

static

ManagementObjectSearcher mos =

new

ManagementObjectSearcher();

private

string

username = "";

private

string

pwd = "";

private

string

space="";

private

string

server = "";

public

ManagementConnectPool(

string

mpusername,

string

mppwd ,

string

mpspace ,

string

mpserver)

...

{

this

.username = mpusername;

this

.pwd = mppwd;

this

.space = mpspace;

this

.server = mpserver;

Conn.Username = mpusername;

Conn.Password = mppwd;

string

scopestring ="//" + mpserver + mpspace;

System.Management.ManagementScope Ms =

new

ManagementScope(scopestring);

Ms.Connect();

mos.Scope = Ms;

}

public

ManagementObjectCollection getQueryResult(

string

queryString)

...

{

ObjectQuery oq =

new

ObjectQuery();

oq.QueryString = queryString;

mos.Query = oq;

ManagementObjectCollection moc =mos.Get();

return

moc;

}

}

4.获取CPU,内存,网络流量等信息public

class

Monitor

...

{

private

string

username = "";

private

string

pwd ="";

private

string

ip = "";

ManagementConnectPool mcp;

WMSServerClass server;

public

Monitor(

string

username,

string

pwd,

string

ip)

...

{

this

.username = username;

this

.pwd = pwd ;

this

.ip = ip;

mcp =

new

ManagementConnectPool(username,pwd,"/root/cimv2",ip);

server =

new

WMSServerClass();

}

WMI方式获取网卡流量

#region

WMI方式获取网卡流量

private

void

getNetWorkFlow()

...

{

ManagementObjectCollection moc = mcp.getQueryResult(@"select * from Win32_NetworkAdapter where macaddress<>null and manufacturer<>'Microsoft'");

string

[] list =

new

string

[moc.Count] ;

foreach

(System.Management.ManagementObject mymac

in

moc)

...

{

string

a = mymac["Speed"].ToString();

//

null WMI未实现该属性

Console.WriteLine(a.ToString());

}

}

#endregion

WMI方式获取CPU信息

#region

WMI方式获取CPU信息

private

void

getCpuInfo()

...

{

ManagementObjectCollection moc = mcp.getQueryResult("select * from Win32_Processor");

string

[] list =

new

string

[moc.Count];

int

i = 0;

foreach

(ManagementObject mo

in

moc)

...

{

string

total = mo.GetPropertyValue("LoadPercentage").ToString();

list[i]=total;

i++;

}

}

#endregion

WMI方式获取内存使用率

#region

WMI方式获取内存使用率

public

string

getMemoryUsage()

...

{

ManagementObjectCollection moc = mcp.getQueryResult("select * from Win32_LogicalMemoryConfiguration");

int

totalm = 1;

int

avilablem = 1;

foreach

(ManagementObject mo

in

moc)

...

{

string

total = mo.GetPropertyValue("TotalPhysicalMemory").ToString();

totalm =

int

.Parse(total);

}

moc = mcp.getQueryResult("select * from Win32_PerfRawData_PerfOS_Memory");

foreach

(ManagementObject mo

in

moc)

...

{

string

avilable = mo.GetPropertyValue("AvailableKBytes").ToString();

avilablem =

int

.Parse(avilable);

}

int

usedm = totalm - avilablem;

double

memoryusage = (

double

)usedm * (

double

)100 / (

double

)totalm ;

return

memoryusage.ToString();

}

#endregion

}

5.获取本地机器信息(WEB)1.如何用WMI获得指定磁盘的容量

#region

1.如何用WMI获得指定磁盘的容量

private

string

DriveType(

string

type)

...

{

string

rtntype="";

switch

(type)

...

{

case

"1":

rtntype="Not Type";

break

;

case

"2":

rtntype="Floppy disk";

break

;

case

"3":

rtntype="Hard disk";

break

;

case

"4":

rtntype="Removable drive or network drive";

break

;

case

"5":

rtntype="CD-ROM";

break

;

case

"6":

rtntype="RAM disk";

break

;

default

:

break

;

}

return

rtntype;

}

private

void

Button1_Click(

object

sender, System.EventArgs e)

...

{

SelectQuery query=

new

SelectQuery("Select * From Win32_LogicalDisk");

ManagementObjectSearcher searcher=

new

ManagementObjectSearcher(query);

foreach

(ManagementBaseObject disk

in

searcher.Get())

...

{

Response.Write(disk["Name"] +" "+DriveType(disk["DriveType"].ToString()) + " " + disk["VolumeName"]+"
");

}

}

#endregion

2.如何用WMI获得指定磁盘的容量

#region

2.如何用WMI获得指定磁盘的容量

private

void

Button2_Click(

object

sender, System.EventArgs e)

...

{

ManagementObject disk =

new

ManagementObject("win32_logicaldisk.deviceid="c:"");

disk.Get();

Response.Write("Logical Disk Size = " + disk["Size"] + " bytes");

}

#endregion

3.如何列出机器中所有的共享资源

#region

3.如何列出机器中所有的共享资源

private

void

Button3_Click(

object

sender, System.EventArgs e)

...

{

ManagementObjectSearcher searcher =

new

ManagementObjectSearcher("SELECT * FROM Win32_share");

foreach

(ManagementObject share

in

searcher.Get())

...

{

Response.Write(share.GetText(TextFormat.Mof));

}

}

#endregion

4.怎样写程控制让系统中的某个文件夹共享或取消共享

#region

4.怎样写程控制让系统中的某个文件夹共享或取消共享

private

void

Button4_Click(

object

sender, System.EventArgs e)

...

{

/**/

/*

首先,这需要以有相应权限的用户登录系统才行

object[] obj = {"C:/Temp","我的共享",0,10,"Dot Net 实现的共享",""};

改为

object[] obj = {"C:/Temp","我的共享",0,null,"Dot Net 实现的共享",""};

就可以实现授权给最多用户了。

*/

ManagementClass _class =

new

ManagementClass(

new

ManagementPath("Win32_Share"));

object

[] obj =

...

{"C:/Temp","我的共享",0,10,"Dot Net 实现的共享",""}

;

_class.InvokeMethod("create",obj);

}

#endregion

5.如何获得系统服务的运行状态

#region

5.如何获得系统服务的运行状态

private

void

Button5_Click(

object

sender, System.EventArgs e)

...

{

string

[] lvData =

new

string

[4];

ManagementObjectSearcher searcher =

new

ManagementObjectSearcher("SELECT * FROM Win32_Service");

foreach

(ManagementObject mo

in

searcher.Get())

...

{

lvData[0] = mo["Name"].ToString();

lvData[1] = mo["StartMode"].ToString();

if

(mo["Started"].Equals(

true

))

lvData[2] = "Started";

else

lvData[2] = "Stop";

lvData[3] = mo["StartName"].ToString();

Response.Write(lvData[0]+lvData[1]+lvData[2]+lvData[3]);

}

}

#endregion

6.通过WMI修改IP,而实现不用重新启动

#region

6.通过WMI修改IP,而实现不用重新启动

private

void

Button6_Click(

object

sender, System.EventArgs e)

...

{

ReportIP();

//

SwitchToDHCP();

SwitchToprivate();

Thread.Sleep( 5000 );

ReportIP();

Response.Write( "end." );

}

private

void

SwitchToDHCP()

...

{

ManagementBaseObject inPar =

null

;

ManagementBaseObject outPar =

null

;

ManagementClass mc =

new

ManagementClass("Win32_NetworkAdapterConfiguration");

ManagementObjectCollection moc = mc.GetInstances();

foreach

( ManagementObject mo

in

moc )

...

{

if

( ! (

bool

) mo["IPEnabled"] )

continue

;

inPar = mo.GetMethodParameters("EnableDHCP");

outPar = mo.InvokeMethod( "EnableDHCP", inPar,

null

);

break

;

}

}

private

void

SwitchToprivate()

...

{

ManagementBaseObject inPar =

null

;

ManagementBaseObject outPar =

null

;

ManagementClass mc =

new

ManagementClass("Win32_NetworkAdapterConfiguration");

ManagementObjectCollection moc = mc.GetInstances();

foreach

( ManagementObject mo

in

moc )

...

{

if

( ! (

bool

) mo[ "IPEnabled" ] )

continue

;

inPar = mo.GetMethodParameters( "Enableprivate" );

inPar["IPAddress"] =

new

string

[]

...

{ "192.168.1.1" }

;

inPar["SubnetMask"] =

new

string

[]

...

{ "255.255.255.0" }

;

outPar = mo.InvokeMethod( "Enableprivate", inPar,

null

);

break

;

}

}

private

void

ReportIP()

...

{

Response.Write( "****** Current IP addresses:" );

ManagementClass mc =

new

ManagementClass("Win32_NetworkAdapterConfiguration");

ManagementObjectCollection moc = mc.GetInstances();

foreach

( ManagementObject mo

in

moc )

...

{

if

( ! (

bool

) mo[ "IPEnabled" ] )

continue

;

string

str="{0} SVC: '{1}' MAC: [{2}]";

str=

string

.Format(mo["Caption"].ToString(), mo["ServiceName"].ToString(),mo["MACAddress"].ToString());

Response.Write(str);

string

[] addresses = (

string

[]) mo[ "IPAddress" ];

string

[] subnets = (

string

[]) mo[ "IPSubnet" ];

Response.Write( " Addresses :" );

foreach

(

string

sad

in

addresses)

Response.Write(sad+"
");

Response.Write( " Subnets :" );

foreach

(

string

sub

in

subnets )

Response.Write(sub+"
");

}

}

#endregion

7.如何利用WMI远程重启远程计算机

#region

7.如何利用WMI远程重启远程计算机

private

void

Button7_Click(

object

sender, System.EventArgs e)

...

{

Response.Write("Computer details retrieved using Windows Management Instrumentation (WMI)");

Response.Write("mailto:singlepine@hotmail.com");

Response.Write("=========================================================================");

//

连接远程计算机

ConnectionOptions co =

new

ConnectionOptions();

co.Username = "john";

co.Password = "john";

System.Management.ManagementScope ms =

new

System.Management.ManagementScope("//192.168.1.2/root/cimv2", co);

//

查询远程计算机

System.Management.ObjectQuery oq =

new

System.Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem");

ManagementObjectSearcher query1 =

new

ManagementObjectSearcher(ms,oq);

ManagementObjectCollection queryCollection1 = query1.Get();

foreach

( ManagementObject mo

in

queryCollection1 )

...

{

string

[] ss=

...

{""}

;

mo.InvokeMethod("Reboot",ss);

Response.Write(mo.ToString());

}

}

#endregion

8.利用WMI创建一个新的进程

#region

8.利用WMI创建一个新的进程

private

void

Button8_Click(

object

sender, System.EventArgs e)

...

{

//

Get the object on which the method will be invoked

ManagementClass processClass =

new

ManagementClass("Win32_Process");

//

Get an input parameters object for this method

ManagementBaseObject inParams = processClass.GetMethodParameters("Create");

//

Fill in input parameter values

inParams["CommandLine"] = "calc.exe";

//

Execute the method

ManagementBaseObject outParams = processClass.InvokeMethod ("Create", inParams,

null

);

//

Display results

//

Note: The return code of the method is provided in the "returnvalue" property of the outParams object

Response.Write("Creation of calculator process returned: " + outParams["returnvalue"]);

Response.Write("Process ID: " + outParams["processId"]);

}

#endregion

9.如何通过WMI终止一个进程

#region

9.如何通过WMI终止一个进程

private

void

Button9_Click(

object

sender, System.EventArgs e)

...

{

ManagementObject service =

new

ManagementObject("win32_service="winmgmt"");

InvokeMethodOptions options =

new

InvokeMethodOptions();

options.Timeout =

new

TimeSpan(0,0,0,5);

ManagementBaseObject outParams = service.InvokeMethod("StopService",

null

, options);

Response.Write("Return Status = " + outParams["Returnvalue"]);

}

#endregion

10.如何用WMI 来获取远程机器的目录以及文件

#region

10.如何用WMI 来获取远程机器的目录以及文件

private

void

Button10_Click(

object

sender, System.EventArgs e)

...

{

ManagementObject disk =

new

ManagementObject(

"win32_logicaldisk.deviceid="c:"");

disk.Get();

Response.Write("Logical Disk Size = " + disk["Size"] + " bytes");

}

#endregion

11.网卡的MAC地址

#region

11.网卡的MAC地址

private

void

Button11_Click(

object

sender, System.EventArgs e)

...

{

ManagementClass mc =

new

ManagementClass("Win32_NetworkAdapterConfiguration");

ManagementObjectCollection moc = mc.GetInstances();

foreach

(ManagementObject mo

in

moc)

...

{

if

((

bool

)mo["IPEnabled"] ==

true

)

Response.Write("MAC address"+mo["MacAddress"].ToString()+"
");

mo.Dispose();

}

}

#endregion

12.CPU的系列号

#region

12.CPU的系列号

private

void

Button12_Click(

object

sender, System.EventArgs e)

...

{

string

cpuInfo = "";

//

cpu序列号

ManagementClass cimobject =

new

ManagementClass("Win32_Processor");

ManagementObjectCollection moc = cimobject.GetInstances();

foreach

(ManagementObject mo

in

moc)

...

{

cpuInfo = mo.Properties["ProcessorId"].Value.ToString();

Response.Write(cpuInfo);

}

}

#endregion

13.主板的系列号

#region

13.主板的系列号

private

void

Button13_Click(

object

sender, System.EventArgs e)

...

{

ManagementObjectSearcher searcher=

new

ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");

foreach

(ManagementObject share

in

searcher.Get())

...

{

Response.Write("主板制造商:" + share["Manufacturer"].ToString()) ;

Response.Write("型号:" +share["Product"].ToString()) ;

Response.Write("序列号:"+share["SerialNumber"].ToString()) ;

}

}

#endregion

14.获取硬盘ID

#region

14.获取硬盘ID

private

void

Button14_Click(

object

sender, System.EventArgs e)

...

{

String HDid;

ManagementClass cimobject =

new

ManagementClass("Win32_DiskDrive");

ManagementObjectCollection moc = cimobject.GetInstances();

foreach

(ManagementObject mo

in

moc)

...

{

HDid = (

string

)mo.Properties["Model"].Value;

Response.Write(HDid);

}

}

#endregion

15.获取本机的用户列表

#region

15.获取本机的用户列表

private

void

Button15_Click(

object

sender, System.EventArgs e)

...

{

SelectQuery query =

new

SelectQuery("SELECT * FROM Win32_UserAccount");

ManagementObjectSearcher searcher =

new

ManagementObjectSearcher(query);

foreach

(ManagementObject os

in

searcher.Get())

...

{

Response.Write(os["Name"]);

}

}

#endregion

}

通过上面介绍的方法,可以很轻松的获取远程或本地机器的性能,进程和硬件信息等。另外:WMI也可以通过使用Vbscript等脚本调用。

说明:其中部分资源来自网友小山的blog。但不够详细说明WMI在服务器性能方面的能力!

c# 服务器性能监控,C#服务器性能监控之WMI的代码示例详解相关推荐

  1. 视频监控系统网络时间同步(NTP网络授时)问题详解

    视频监控系统网络时间同步(NTP网络授时)问题详解 视频监控系统网络时间同步(NTP网络授时)问题详解 本文由安徽京准公司提供,转载需授权@@ 视频监控系统是指综合应用视音频监控.通信.计算机网络等技 ...

  2. STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解

    STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解 上一次我们讲了OneNet平台的注册,这次我们来讲一下MQTT的常用报文用法 上一篇地址https ...

  3. 性能百万/s:腾讯轻量级全局流控方案详解

    作者:莫家文,腾讯事务型开发工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/320.html WeTest ...

  4. 性能百万/s:腾讯轻量级全局流控方案详解【转自Wetest】

    阿里用的方案是在nginx中配置限流(限流功能模块是自己开发的),流量统计线上是有监控打通的,具体的限流值是通过线上流量表现+线下性能测试(模拟线上场景)测试得出的. 全新的全局流控实现方案,既解决了 ...

  5. php 监控nginx日志,nginx启用status监控服务器状态的方法详解

    nginx和php-fpm一样内建了一个状态页,对于想了解nginx的状态以及监控nginx非常有帮助. 在Nginx中的stub_status模块主要用于查看Nginx的一些状态信息.本模块默认是不 ...

  6. 服务器BIOS、BMC、IPMI、EFI、UEFI等知识详解

    详解连接:服务器BIOS和BMC等知识详解_开源Linux-CSDN博客https://blog.csdn.net/weixin_38889300/article/details/106913495 ...

  7. 腾讯云GPU服务器NVIDIA P40 GPU、P4、T4和GPU自由卡详解

    腾讯云GPU云服务器,GPU云服务器实例可选GN8机型.GN6S机型.GN7机型等规格,搭载 NVIDIA P40 GPU,最长可3年,云服务器吧来详细说下腾讯云GPU云服务器: 目录 腾讯云GPU云 ...

  8. 服务器文件共享不同用户互访设置,samba配置_samba文件共享服务配置详解

    摘要 腾兴网为您分享:samba文件共享服务配置详解,之了课堂,央视影音,人人理财,平安证券等软件知识,以及游戏通用窗口化工具,福建省校讯通,净天之命1.71,teamviewer安卓,宝贝听听,手机 ...

  9. 暗黑3服务器维护能登录,暗黑3登陆错误原因及解决办法详解

    暗黑3登陆错误原因及解决办法详解 2012-10-15 09:06:03来源:游戏下载编辑:评论(0) 暗黑3报错ERROR解决方法,全部暗黑3报错汇总,全部报错汇总解答.小编将玩家遇到的各种暗黑3安 ...

最新文章

  1. 技术总监需要会些什么?
  2. 机器学习笔记:线性规划,梯度下降
  3. python终端中退格键,方向键不能使用
  4. python实现冒泡排序算法的非递归版本_python排序算法速度比较:快速排序,归并排序,冒泡排序...
  5. 函数调用,统计数中'2’的个数
  6. EF 如何更新多对多关系的实体
  7. javascript 内存回收机制
  8. Java 串口 mysql_java串口通讯
  9. 浅析数字签名的工作原理 【小白级别的原创文章 仅供扫盲】
  10. iOS开发经验总结(一)
  11. ce标志cad_CAD自定义快捷键+常用符号
  12. Unity 获取GPS经纬度
  13. JMeter接口测试工具基础 — Badboy工具
  14. Linux学习基础一 【安装 目录 系统命令 常用vim操作】
  15. R语言使用mean函数计算dataframe指定数据列的均值
  16. Nebula 分布式图数据库介绍
  17. windows配置指定网段流量走虚拟专用网络
  18. 网吧游戏更新与保护解决方案
  19. 今日分享:自用的2款markdown在线编辑器推荐给你,快码住
  20. windows快速生成ssh key

热门文章

  1. jQuery load()方法特殊用法!
  2. 服务器开机提示修复,电脑开机提示自动修复怎么办?win10电脑开机提示自动修复教程...
  3. oracle+ddl+执行很慢,Oracle的DDL语句不能回滚(直接提交)
  4. mysql怎么查找列命令_MySQL查询命令-DQL
  5. java.lang.ClassNotFoundException: Cannot find class: com.mysql.jdbc.Driver解决办法
  6. python linux编程与window编程_Python3如何在Windows和Linux上打包
  7. 新疆计算机一级考试试题手机软件,新疆维吾尔自治区计算机一级考试理论题库(最新最完整)...
  8. hive简介以及安装配置
  9. [开源]基于姿态估计的运动计数APP开发(三)
  10. 如何在64位的Win10系统下安装.NET Framework 3.0