2016-03-07 13 views
0

我正在嘗試爲羣集中的所有虛擬機獲取帶有規定磁盤大小的html報告。我試圖列出羣集中的所有虛擬機:獲取Hyper-V羣集中的所有虛擬機Windows 2012 R2及其磁盤大小

$VMs = get-ClusterGroup | ? {$_.GroupType -eq "VirtualMachine" } | Get-VM 

而且這種方式就像一種魅力。然而,當我試圖做一個循環:

foreach ($VM in $VMs) 
{ 
Get-VM -VMName $VM.Name | Select-Object VMId | Get-VHD 
} 

我得到錯誤,當我運行這一點,不在我目前的羣集節點上的每個VM。 所以每次每個節點我運行以下命令:

Get-VM -VMName * | Select-Object VMId | Get-VHD | ConvertTo-HTML -Proprerty path,computername,vhdtype,@{label='Size(GB)');expression={$_.filesize/1gb -as [int]}} > report.html 

這就像一個魅力也。但這需要登錄到羣集中的每個Hyper-V主機。 如何使它從一個節點獲得集羣中所有虛擬機的HTML輸出?

回答

0

這樣的事情呢?

$nodes = Get-ClusterNode 
foreach($node in $nodes) 
{ 
    $VMs=Get-VM -ComputerName $node.name 
    foreach($VM in $VMs) 
    { 
     $VM.VMName 
     Get-VHD -ComputerName $node.Name -VMId $VM.VMId | ft vhdtype,path -AutoSize 
    } 
} 

從我所知道的;每個Get-VHD調用需要節點名稱爲-ComputerName-VMId。 將Get-VM傳遞給Get-VHD由於某些原因不提供節點名稱。

你在找什麼,上面沒有提供結果作爲一個單一的對象被格式化(HTML或其他)。 然而,有一個內聯ForEach-Object將做的伎倆。

這是也許你在找什麼:

Get-VM -ComputerName (Get-ClusterNode) | 
ForEach-Object {Get-VHD -ComputerName $_.ComputerName -VMId $_.VMId} | 
ConvertTo-HTML -Property path,computername,vhdtype,@{label='Size(GB)';expression={$_.filesize/1gb -as [int]}} > report.html 

在單行:

Get-VM -ComputerName (Get-ClusterNode) | ForEach-Object {Get-VHD -ComputerName $_.ComputerName -VMId $_.VMId} | ConvertTo-HTML -Property path,computername,vhdtype,@{label='Size(GB)';expression={$_.filesize/1gb -as [int]}} > report.html 

希望這會滿足您的需求。請享用!