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
s