WMI使用集锦

转载: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:[email protected]"); 

            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

    }
View Code

 

 

 

你可能感兴趣的:(使用)