0

クラスター内のすべての VM のプロビジョニングされたディスク サイズを含む html レポートを取得しようとしています。クラスター内のすべての VM を次のように一覧表示しようとしています。

$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 ホストにログインするために必要です。1 つのノードからクラスター内のすべての VM を使用して HTML で出力を取得するにはどうすればよいですか?

4

1 に答える 1

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にノード名が必要です。-VMIdGet-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

これがあなたのニーズを満たすことを願っています。楽しみ!

于 2016-05-09T23:08:57.897 に答える