获取Hyper-V群集Windows 2012 R2中的所有VM及其磁盘大小

时间:2016-03-07 15:04:51

标签: powershell hyper-v windows2012

我正在尝试为群集中的所有VM获取带有详细磁盘大小的html报告。我试图列出群集中的所有虚拟机:

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

这就像一个魅力。但是,当我尝试制作循环时:

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

当我运行此操作时,我在每个当前群集节点上都没有出现错误。 所以每个节点我都运行以下命令:

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主机。 如何在一个节点上使用群集中的所有VM获取HTML输出?

1 个答案:

答案 0 :(得分: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

希望这符合您的需求。享受!