转载: http://singlepine.cnblogs.com/articles/299457.html
1.WMI简介 WMI是英文Windows Management Instrumentation的简写,它的功能主要是:访问本地主机的一些信息和服务,可以管理远程计算机(当然你必须要拥有足够的权限),比如:重启,关机,关闭进程,创建进程等。 2.使用时首先添加System.Management.dll,然后引用
using
System.Management;
using
System.Threading;
3.示例代码
#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 " ]+ " <br> " ); } } #endregion #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 #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 #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 #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 #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}\n 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 + " <br> " ); Response.Write( " Subnets : " ); foreach ( string sub in subnets ) Response.Write(sub + " <br> " ); } } #endregion #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 #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 #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 #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 #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()+ " <br> " ); mo.Dispose(); } } #endregion #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 #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 #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 #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 }