星期一, 9月 13, 2010

讀取Registry Value(WMI)

 這邊要順便紀錄如何使用WMI呼叫Method

  • 先建立連線 Remote 連線

//建立遠端連線
ConnectionOptions remoteCon = new ConnectionOptions();
remoteCon.Username =Account;
remoteCon.Password = Password;
//如果為NULL,則已電腦的網域為預設值
//remoteCon.Authority = "ntdlmdomain:DOMAIN"; 
//取得或設定 COM 驗證等級,以使用於這個連接中的作業。
remoteCon.Authentication = AuthenticationLevel.PacketPrivacy;
//指出是否需要為連接作業啟用使用者權限。在執行的作業需要啟用某些使用者權限時 (例如,電腦重新開機) 才應該使用這個屬性。 
remoteCon.EnablePrivileges = true;  
  • 設定Scope
scopePath = "\\\\" + IP + "\\root\\default";

private ManagementClass RegGetValue(string path, ConnectionOptions remoteCon,string ip)
        {
            //設定管理的範圍
            ManagementScope remoteSop = new ManagementScope(path, remoteCon);

            try
            {
                remoteSop.Connect();
            }
            catch (Exception e)
            
             Export.LogWrt(string.Format("連線到{0}發生錯誤,錯誤訊息:{1}", ip, e.Message));
            }

            if (remoteSop.IsConnected)
            {
                ManagementClass methodCall = new ManagementClass(remoteSop, new ManagementPath("StdRegProv"), null);
                return methodCall;
            }
            else
            {
                return null;
            } 
}

  • 取得Method裡的參數
//取得method裡的參數instance
 inParams = methodCall.GetMethodParameters("GetDWORDValue");
  • 設定參數
 inParams["hDefKey"] = 0x80000002;  //HKEY_LOCAL_MACHINE
 inParams["sSubKeyName"] = @"SOFTWARE\Altiris\Altiris Agent\Software Delivery";
  •  執行Method並取回Return Value

//執行Method並且取得Return Value
 outParams = methodCall.InvokeMethod("GetDWORDValue", inParams, null); 
 if (Convert.ToInt32(outParams[i]["returnValue"]) == 0)   //OK
  {
       tableList.Add(string.Format("{0:N2}", outParams["uValue"]));
 }
 else
 { 
      tableList.Add(null);
  }

參考︰

沒有留言: