2014-01-15 38 views
2

爲了簡短,我需要管理和更新約150個虛擬服務器的列表。我想獲得關於它們的一些信息,但爲了舉例,假設我只想要虛擬機的RAM和物理處理器。在虛擬機上返回本地信息的WMI查詢

但是,當我查詢虛擬服務器時,返回的信息只是關於本地機器的信息,而不是虛擬機器。我不知道要去哪裏。我得到的最多的幫助是從http://blogs.technet.com/b/richard_macdonald/

我的應用程序在C#.NET和connstr編程是從下面創建的字符串:

SqlConnectionStringBuilder stb = new SqlConnectionStringBuilder(); 
stb.DataSource = lbxConnections.SelectedItem.ToString(); 
stb.IntegratedSecurity = true; 

string connstr = stb.ToString(); 

哪裏lbxConnections是填充了我的一個有效的SQL服務器數據庫連接信息的列表框。

,我使用查詢虛擬機,之後成功地連接到它並確保它的存在的代碼,是

using (SqlConnection conn = new SqlConnection(connstr)) 

其跳下到下面的代碼塊如下

ManagementScope manScope = new ManagementScope(@"\\" + connstr + "\root\virtualization"); 
ObjectQuery queryObj = new ObjectQuery("SELECT * FROM Win32_ComputerSystem"); 
ManagementObjectSearcher vmSearcher = new ManagementObjectSearcher(manScope, queryObj); 
ManagementObjectCollection vmCollection = vmSearcher.Get(); 

foreach (ManagementObject vm in vmCollection) 
{ 
    txtPhysicalProcessors.Text = (vm["NumberOfProcessors"]).ToString(); 
    txtRam.Text = Convert.ToString(Math.Round(Convert.ToDouble(vm.Properties["TotalPhysicalMemory"].Value)/1073741824, 1)) + " GB"; 
} 

如果我的問題不符合社區標準,我很抱歉,因爲這是我在StackOverflow上發佈的第一篇文章,在過去的文章回答了4年的軟件後提出了所有其他問題。

任何幫助或建議將是非常棒的。謝謝! :)

回答

0

您必須調整您的ManagementScope才能使其工作。而不是你現在給的connstr,用IP地址或VMMware實例的名稱替換它。 (我個人主要使用目標機器的名稱)另外,在這種情況下,您必須使用\\來跳過\

到目前爲止,這是我第一次看到使用SqlConnectionString的WMI查詢,懷疑它是否可能。

ManagementScope manScope = new ManagementScope(@"\\\\" + myServerName+ \\root\\virtualization"); 
ObjectQuery queryObj = new ObjectQuery("SELECT * FROM Win32_ComputerSystem"); 
ManagementObjectSearcher vmSearcher = new ManagementObjectSearcher(manScope, queryObj); 

foreach (ManagementObject ob in vmSearcher.Get()) 
{ 
    txtPhysicalProcessors.Text = ob["NumberOfProcessors"].ToString(); 
    txtRam.Text = Convert.ToString(Math.Round(Convert.ToDouble(ob["TotalPhysicalMemory"].ToString())/1073741824, 1)) + " GB"; 
} 

在一個側面說明,請this link,它可能有助於在C#中生成WMI查詢。爲您提供執行的代碼。

+0

我的connstr是從一個查詢中生成的,該查詢提取了我的虛擬機的名稱或IP。插入到我的問題的第一個代碼塊使用我的查詢到虛擬機地址表上並填充lbxConnections,然後使用選定值連接並查詢WMI以獲取虛擬信息。 –

+0

所以,如果我理解正確,你的connstr看起來不像'「Sever = x; Initial catalog = x; username = x; password = x;''?只是出於好奇,如果你硬編碼服務器的名稱或IP(並設置雙'\',你會得到任何結果? – AssaultingCuccos

+0

它的存儲我的管理員憑證後,它的代碼工作, connstr看起來像「數據源= x;集成安全性=真」,其中數據源是我試圖訪問的虛擬機的ip或名稱 –