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.Manageme<strong style="color:transparent">本文来源gao@daima#com搞(%代@#码网@</strong>ntObject 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}