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

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

}

f9b7351c6fdb3ece84f0d628cdcc3ea0.gif

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中运算符百分号作用_SQL基础知识——LIKE运算符

LIKE 作用在WHERE子句中使用LIKE运算符来搜索列中的指定模式。 有两个通配符与LIKE运算符一起使用&#xff1a;&#xff05; - 百分号表示零个&#xff0c;一个或多个字符_ - 下划线表示单个字符注意&#xff1a; MS Access使用问号(?)而不是下划线(_)。 百分号和下划线也可以…

服务器点播直播系统,服务器点播直播系统

服务器点播直播系统 内容精选换一换在SAP系统中&#xff0c;除了SAP HANA节点使用裸金属服务器外&#xff0c;其他节点都使用弹性云服务器。Jump Host弹性云服务器&#xff0c;用户可通过访问该服务器后&#xff0c;再通过SSH协议跳转到SAP HANA及SAP应用节点。同时用于部署SAP…

eureka多了一个莫名其妙的服务_SpringCloud 服务注册与发现组件 Eureka

一、SpringCloud介绍微服务&#xff0c;为了更好的创建项目组织结构、更高效的项目的迭代效果、更优良的架构设计&#xff0c;就需要使用微服务的架构思想&#xff0c;来对项目进行搭建或者重构。企业碰到的第一个问题是服务如何进行拆分。根据业务边界来划分&#xff0c;拆分开…

怎么用贝塞尔工具画圆_Win10恶意软件删除工具怎么用?这个方法都舍不得分享...

Win10恶意软件删除工具怎么用&#xff1f;恶意软件删除工具相信很多朋友都会在windows更新中看到过&#xff0c;但是很多朋友确从来没有用过&#xff0c;微软每个月都会把恶意软件删除工具给更新一下&#xff0c;主要作用是用来分析用户电脑上是否存在风险程序的工具。其实大家…

springboot 获取bean_SpringBoot高级(自动配置 事件监听 监控)

SpringBoot自动配置condition-1Condition是Spring4.0后引入的条件化配置接口&#xff0c;通过实现Condition接口可以完成有条件的加载相应的BeanConditional要配和Condition的实现类(ClassCondition)进行使用ClassConditionpublic class ClassCondition implements Condition {…

golang延时_golang 实现延迟消息原理与方法

实现延迟消息具体思路我是看的下面这篇文章https://mp.weixin.qq.com/s/eDMV25YqCPYjxQG-dvqSqQ实现延迟消息最主要的两个结构&#xff1a;环形队列&#xff1a;通过golang中的数组实现&#xff0c;分成3600个slot。任务集合&#xff1a;通过map[key]*Task&#xff0c;每个slot…

python特征工程插件_手把手教你用Python实现自动特征工程

任何参与过机器学习比赛的人&#xff0c;都能深深体会特征工程在构建机器学习模型中的重要性&#xff0c;它决定了你在比赛排行榜中的位置。 特征工程具有强大的潜力&#xff0c;但是手动操作是个缓慢且艰巨的过程。Prateek Joshi&#xff0c;是一名数据科学家&#xff0c;花了…

2020笔记本性价比之王_笔记本电脑性价比排行2020前十名?

展开全部1、 联想(Lenovo)拯救者R7000产品材质&#xff1a;32313133353236313431303231363533e58685e5aeb931333433656631ABCD面塑料产品尺寸&#xff1a;15.6寸CPU型号&#xff1a; AMD Ryzen5 4600H显卡型号&#xff1a;NVIDIA GeForce GTX 1650屏幕参数&#xff1a; 1080P I…

ios不行安卓可以 微信签名_王者荣耀安卓、iOS互通来了!现在可以互看好友资料...

3月10日消息&#xff0c;王者荣耀在更新正式服后&#xff0c;安卓版和iOS版开通了资料互看。此前安卓和iOS上的游戏一直因为使用的服务器不同&#xff0c;不能实现两个平台的游戏互动&#xff0c;当然也不能实现同账号的资料同步。这对很多玩家来说造成一定的困扰&#xff0c;如…

存储型xss漏洞怎么解决_FinDOMXSS:一款针对DOM型XSS漏洞的快速扫描工具

FinDOM-XSSFinDOM-XSS是一款针对DOM型XSS漏洞的快速扫描工具&#xff0c;广大安全研究人员可以利用FinDOM-XSS快速地发现/扫描出目标应用中潜在的DOM型XSS漏洞。工具安装广大研究人员可以使用下列命令将该项目源码克隆至本地&#xff1a;$ git clone https://github.com/dwisis…

c语言如何判断数据是否符合正态分布_统计学里的数据正态性检验

在前面的文章中讲过&#xff0c;很多模型的假设条件都是数据是服从正态分布的。这篇文章主要讲讲如何判断数据是否符合正态分布。主要分为两种方法&#xff1a;描述统计方法和统计检验方法。01.描述统计方法描述统计就是用描述的数字或图表来判断数据是否符合正态分布。常用的方…

python matplotlib_Python の Matplotlib

matplotlib是python优秀的数据可视化第三方库。matplotlib.pyplot子库可以调用全部功能&#xff0c;便于用户使用。绘图-plt.plot(x,y,format,**kwargs)x&#xff1a;x轴数据y&#xff1a;y轴数据format_string&#xff1a;控制曲线的格式字符串&#xff0c;颜色线条点**kwargs…

mysql 数据库还原 不齐_请教mysql数据库还原问题。

你的位置:问答吧-> 数据库-> 问题详情请教mysql数据库还原问题。50多m&#xff0c;能不能拆分&#xff1f;上传到服务器上总是超时。怎么办&#xff1f;[ 本帖最后由 geniux 于 2007-9-24 15:23 编辑 ]作者: geniux发布时间: 2007-09-20继续请教&#xff0c;现在数据库传…

python self理解_Python面向对象总结,让你快速掌握面向对象常用的用法

python等面向对象的提出是为了更好的处理和管理同属一个类别的事情&#xff0c;这样就可以省去多余重复的基础代码&#xff0c;让程序变得更加简洁和强大。对于学习编程的朋友来说&#xff0c;熟悉掌握面向对象是非常重要的。下面开始讲讲关于python面向对象的知识&#xff0c;…

mysql 查询 汇总_Mysql-Sql查询汇总

软件测试Mysql-Sql查询汇总简单查询创建students表create table students(id int not null unique primary key auto_increment,name varchar(10) not null,class varchar(10) not null,grade int)添加数据insert into students values(0,老1,1班,80);insert into students val…

pat和ccf哪个含金量高_函授和网络教育哪个好 哪个含金量高

函授和网络教育都是成人教育学习的方式&#xff0c;但是考生报考的时候选择哪个比较好&#xff0c;下面小编整理了相关信息&#xff0c;以供参考。一、函授好还是网络教育好其实这两种教育方式都各有各的优点&#xff0c;两者都是不可替代的&#xff0c;这两种方式对于不同阶段…

mysql各种联结的区别_mysql几种连接方式区别

mysql的几种join2017年03月19日 14:49:07 carl-zhao 阅读数&#xff1a;7845 标签&#xff1a; mysqlsqljoin 更多个人分类&#xff1a; MySQL版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/u012410733/article/details/63…

python和office_Python在office开发中的应用

Python with Excel 有几个很好的Python模块能够方便地操作Excel的数据&#xff0c;包括读与写&#xff0c;不要求本地安装Excel。例如pandas, openpyxl, xlrd, xlutils 和 pyexcel. 详情可以参考下面的介绍&#xff1a; https://www.datacamp.com/community/tutorials/python-e…

android通过用户名密码访问服务器获取信息_MySQL ------ 管理用户对数据库的访问控制(GRANT 与 REVOKE)(二十九)...

数据库服务器通常包含着关键的数据&#xff0c;所以为了确保这些数据的安全和完整需要要利用访问控制。MySQL服务器的安全基础是&#xff1a;用户应该对他们需要的数据具有适当的访问权&#xff0c;既不能多也不能少&#xff08;即用户不能对过多的数据具有访问权&#xff09;访…

mysql安全补丁如何处理_3分钟学会mysql数据库的逻辑架构原理

这篇文章主要是从mysql数据库的逻辑架构来认识掌握mysql的原理。只要是稍微有一点计算机的相关知识相信都能看明白。一、笼统的逻辑架构先给出一张逻辑架构图&#xff0c;这张图是让你从宏观的角度来分析认识一下。从这张图你可以获取到如下的信息&#xff1a;&#xff08;1&am…