WMI使用集锦

系统 1605 0

转载: 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
        
        
          

    }
        
      
View Code

 

 

 

WMI使用集锦


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论