星期三, 8月 04, 2010

c# 使用WMI

利用WMI 可以輕鬆取得電腦裡面許多相關的資訊
常用的Win32類別可以在msdn查詢相關資料
http://msdn.microsoft.com/en-us/library/aa394084%28v=VS.85%29.aspx 

System.Management提供了幾種常用的Class來取得WMI相關訊息  
  • ObjectQuery
  • ManagementObjectSearcher
  • ManagementObjectCollection
  • ManagementObject   
  • ManagementClass
以下兩個通常用在遠端查詢的時候使用
  • ConnectionOptions 
  • ManagementScope
    簡單的範例︰
           private void WMI() 
            {
                //建立ManageClass類別
                ManagementClass wmi_Local = new ManagementClass("Win32_LogicalDisk");
                //利用foreach取得ManagementObject
               foreach (ManagementObject wmiSelect in wmi_Local.GetInstances()) 
                {
                    MessageBox.Show(wmiSelect["DeviceID"].ToString());
               
                }
            }
    ManagementObjectSearcher(摘錄自msdn)

    這個類別的執行個體會將 ObjectQuery 或其系出物件所表示的 WMI 查詢當做輸入,也會選擇性將表示執行查詢所在 WMI 命名空間的 ManagementScope 當做輸入。

      private void WMI()
            {
               //使用Query的方式來查詢Win32_LogicalDisk類別,DriveType為本機磁碟的代碼
                ManagementObjectSearcher wmi_LocalTest = new ManagementObjectSearcher("select * from Win32_LogicalDisk where DriveType=3");
    
    
                foreach (ManagementObject wmiSelect in wmi_LocalTest.Get())
                {
                    MessageBox.Show(wmiSelect["DeviceID"].ToString());
    
                }
            }
    
    以下為連到遠端電腦簡單範例︰

    public void remoteWMI()
            {
                //建立遠端連線
                ConnectionOptions remoteCon = new ConnectionOptions();
                //remoteCon.Authority = "ntdlmdomain:DOMAIN"; //如果為NULL,則已電腦的網域為預設值
                remoteCon.Username="Administrator";
                remoteCon.Password="*****";
                //取得或設定 COM 驗證等級,以使用於這個連接中的作業。
                //remoteCon.Authentication =AuthenticationLevel.Default;
                
                //指出是否需要為連接作業啟用使用者權限。在執行的作業需要啟用某些使用者權限時 (例如,電腦重新開機) 才應該使用這個屬性。 
                //remoteCon.EnablePrivileges = true; 
    
                //設定管理的範圍
                ManagementScope remoteSop = new ManagementScope("\\\\192.168.1.115\\root\\cimv2",remoteCon);
                remoteSop.Connect();
                //宣告Query
                ObjectQuery queryStr=new ObjectQuery("select * from Win32_UserAccount");
    
                ManagementObjectSearcher wmi_Local = new ManagementObjectSearcher(remoteSop, queryStr);
                //利用foreach取得ManagementObjec執行個體
                foreach (ManagementObject wmiSelect in wmi_Local.Get())
                {
                   MessageBox.Show(wmiSelect["Name"].ToString());
                }
           } 
    
    

    沒有留言: