WMI使用集锦

1.WMI简介
WMI是英文Windows Management Instrumentation的简写,它的功能主要是:访问本地主机的一些信息和服务,可以管理远程计算机(当然你必须要拥有足够的权限),比如:重启,关机,关闭进程,创建进程等。
2.使用时首先添加System.Management.dll,然后引用

using System.Management;
using System.Threading; 

3.示例代码
3.1 html代码

<HTML>
    <HEAD>
        <title>WMITest</title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
        <form id="Form1" method="post" runat="server">
            <FONT face="宋体">
                <asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 48px; POSITION: absolute; TOP: 16px" runat="server"
                    Text="获得本地磁盘的信息" Width="152px"></asp:Button>
                <asp:Button id="Button2" style="Z-INDEX: 102; LEFT: 32px; POSITION: absolute; TOP: 56px" runat="server"
                    Text="获得指定磁盘的容量" Width="144px"></asp:Button>
                <asp:Button id="Button3" style="Z-INDEX: 103; LEFT: 32px; POSITION: absolute; TOP: 96px" runat="server"
                    Text="列出机器中所有的共享资源" Width="192px"></asp:Button>
                <asp:Button id="Button4" style="Z-INDEX: 104; LEFT: 8px; POSITION: absolute; TOP: 128px" runat="server"
                    Text="控制让系统中的某个文件夹共享或取消共享" Width="264px"></asp:Button>
                <asp:Button id="Button5" style="Z-INDEX: 105; LEFT: 48px; POSITION: absolute; TOP: 160px" runat="server"
                    Text="获得系统服务的运行状态"></asp:Button>
                <asp:Button id="Button6" style="Z-INDEX: 106; LEFT: 40px; POSITION: absolute; TOP: 192px" runat="server"
                    Text="通过WMI修改IP,而实现不用重新启动" Width="248px"></asp:Button>
                <asp:Button id="Button7" style="Z-INDEX: 107; LEFT: 24px; POSITION: absolute; TOP: 224px" runat="server"
                    Text="如何利用WMI远程重启远程计算机" Width="232px"></asp:Button>
                <asp:Button id="Button8" style="Z-INDEX: 108; LEFT: 40px; POSITION: absolute; TOP: 264px" runat="server"
                    Text="利用WMI创建一个新的进程" Width="192px"></asp:Button>
                <asp:Button id="Button9" style="Z-INDEX: 109; LEFT: 32px; POSITION: absolute; TOP: 296px" runat="server"
                    Text="如何通过WMI终止一个进程" Width="192px"></asp:Button>
                <asp:Button id="Button10" style="Z-INDEX: 110; LEFT: 32px; POSITION: absolute; TOP: 328px" runat="server"
                    Text="如何用WMI 来获取远程机器的目录以及文件" Width="280px"></asp:Button>
                <asp:Button id="Button11" style="Z-INDEX: 111; LEFT: 424px; POSITION: absolute; TOP: 24px" runat="server"
                    Text="网卡的MAC地址" Width="120px"></asp:Button>
                <asp:Button id="Button12" style="Z-INDEX: 112; LEFT: 456px; POSITION: absolute; TOP: 64px" runat="server"
                    Text="CPU的系列号 " Width="104px"></asp:Button>
                <asp:Button id="Button13" style="Z-INDEX: 113; LEFT: 448px; POSITION: absolute; TOP: 120px"
                    runat="server" Text="主板的系列号"></asp:Button>
                <asp:Button id="Button14" style="Z-INDEX: 114; LEFT: 472px; POSITION: absolute; TOP: 160px"
                    runat="server" Text="获取硬盘ID"></asp:Button>
                <asp:Button id="Button15" style="Z-INDEX: 115; LEFT: 448px; POSITION: absolute; TOP: 208px"
                    runat="server" Text="获取本机的用户列表" Width="144px"></asp:Button></FONT>
        </form>
    </body>
</HTML>

public class WMITest : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Button Button2;
        protected System.Web.UI.WebControls.Button Button3;
        protected System.Web.UI.WebControls.Button Button4;
        protected System.Web.UI.WebControls.Button Button5;
        protected System.Web.UI.WebControls.Button Button6;
        protected System.Web.UI.WebControls.Button Button7;
        protected System.Web.UI.WebControls.Button Button8;
        protected System.Web.UI.WebControls.Button Button9;
        protected System.Web.UI.WebControls.Button Button10;
        protected System.Web.UI.WebControls.Button Button11;
        protected System.Web.UI.WebControls.Button Button12;
        protected System.Web.UI.WebControls.Button Button13;
        protected System.Web.UI.WebControls.Button Button14;
        protected System.Web.UI.WebControls.Button Button15;
        protected System.Web.UI.WebControls.Button Button1;
    
        private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here
        }

        Web Form Designer generated code#region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
        
        /**//// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {    
            this.Button1.Click += new System.EventHandler(this.Button1_Click);
            this.Button2.Click += new System.EventHandler(this.Button2_Click);
            this.Button3.Click += new System.EventHandler(this.Button3_Click);
            this.Button4.Click += new System.EventHandler(this.Button4_Click);
            this.Button5.Click += new System.EventHandler(this.Button5_Click);
            this.Button6.Click += new System.EventHandler(this.Button6_Click);
            this.Button7.Click += new System.EventHandler(this.Button7_Click);
            this.Button8.Click += new System.EventHandler(this.Button8_Click);
            this.Button9.Click += new System.EventHandler(this.Button9_Click);
            this.Button10.Click += new System.EventHandler(this.Button10_Click);
            this.Button11.Click += new System.EventHandler(this.Button11_Click);
            this.Button12.Click += new System.EventHandler(this.Button12_Click);
            this.Button13.Click += new System.EventHandler(this.Button13_Click);
            this.Button14.Click += new System.EventHandler(this.Button14_Click);
            this.Button15.Click += new System.EventHandler(this.Button15_Click);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        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"]+"<br>"); 
            }
        }
        #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}\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

        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()+"<br>"); 
                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

posted @ 2010-11-19 09:27  Treenew Lyn  阅读(580)  评论(2编辑  收藏  举报