Parece que algumas informações de que você precisa estão na saída de Get-VM
e são perdidas quando você seleciona apenas a propriedade NetworkAdapters. É por isso que eu mudei abaixo. ele faz um loop sobre a VM agora e seleciona a propriedade NetworkAdapters durante o loop.
Eu também:
- Coloque tudo em um
PSCustomObject
diretamente, sem necessidade deNew-Object
ou[ordered]
- Coloque a variável
$results
antes do cicloforeach
- Adicionado
| ft -Autosize
ao seuWrite-Output
, para que seja formatado da maneira que você quiser (se quiser usar a saída do script ainda mais no script, remova| ft -autosize
novamente, só é bom por razões estéticas) - Especifiquei o
ClusterObject
no seuGet-VM
- não tenho tanta certeza disso, pois não trabalho com clusters, mas acho que você precisa especificar essas informações, senão só leria VMs locais, nunca de um cluster remoto. - Não havia propriedade para
OSStatus
. Eu acho que você quis dizerOperationalStatus
. Eu mudei para isso.
Aqui está o código
$clus = Read-Host 'Enter the Cluster Name'
$Nodes = Get-clusternode -Cluster $clus
$results = @()
foreach($Node in $Nodes)
{
$VMs = Get-VM -ClusterObject $Node
foreach($VM in $VMs)
{
$VMtmp = $VM | select -expand NetworkAdapters
$results += [PSCustomObject]@{
'NodeName' = $Node;
'VMName' = $VM.VMName;
'IPaddress' = $VMtmp.IPAddresses[0];
'Status' = $VM.State;
'AdapterStatus' = $VMtmp.Status[0];
'OSStatus' = $VM.OperationalStatus[0];
'Uptime' = $VM.Uptime
}
}
}
Write-Output $results | ft -AutoSize