2017-01-03 78 views
1

我試圖使用Azure RM的其餘接口獲取資源組中所有虛擬機的狀態。使用Rest獲取所有Azure RM虛擬機的狀態

我可以通過使用URL https://management.azure.com/subscriptions/[SubscriptionId]/resourceGroups/[ResourceGroup]/providers/Microsoft.Compute/virtualmachines/[serverName]得到1 VM的狀態?$擴大= instanceView

,我可以得到所有的虛擬機使用此URL https://management.azure.com/subscriptions/[SubscriptionId]/resourceGroups/[ResourceGroup]/providers/Microsoft.Compute/virtualmachines

但是這不返回虛擬機的狀態。我嘗試傳遞$ expand = instanceView,但是在獲取所有虛擬機時沒有任何影響。

+0

我懷疑你能做到這一點,因爲'instanceView'事情是聯繫在一起的虛擬機資源,而不是資源組或Microsoft.Compute提供商。你必須迭代虛擬機並調用'$ expand = instanceView'。 – evilSnobu

回答

0

這不會返回虛擬機的狀態。我嘗試傳遞$ expand = instanceView,但是在獲取所有虛擬機時沒有任何影響。

this documentation,我們可以發現,GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}?api-version=2016-03-30[&$expand]使我們能夠使用$擴展選項擴展屬性,但GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines?api-version=2016-03-30不支持$擴展選項。列出指定資源組中所有虛擬機的API方法可能不會返回IQueryable或不允許查詢選項。正如evilSnobu所說的,你可以嘗試分兩步進行:列出指定資源組中的所有虛擬機,遍歷所有虛擬機並提取名稱屬性,然後發送請求以檢索指定虛擬機的信息,並使用$ expand在請求的查詢字符串中展開instanceView屬性。

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(string.Format("https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/virtualMachines/{2}?api-version=2016-03-30&$expand=instanceView", subscriptionid, resourcegroup, vmname)); 

request.Method = "GET"; 
request.Headers["Authorization"] = "Bearer " + token; 

enter image description here

相關問題