WMI使用集锦

    技术2022-05-11  103

    转:http://singlepine.cnblogs.com/archive/2005/12/18/299457.html

    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}  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     }

    最新回复(0)