zoukankan      html  css  js  c++  java
  • 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}
     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
        }
    View Code
  • 相关阅读:
    Eclipse之注释操作
    Eclipse之查找、替换操作
    思维游戏(4)之有问题的楼房
    第七层 应用层
    第三章 进程
    第一章 导论
    软件开发流程
    单元测试
    Google Chrome浏览器调试
    python安装完毕后,提示找不到ssl模块的解决步骤
  • 原文地址:https://www.cnblogs.com/tianma3798/p/3561077.html
Copyright © 2011-2022 走看看