Precisa de ajuda para buscar informações dos nós do HyperV usando o Powershell

0

Abaixo está meu script para buscar as informações. Eu estou ficando OSStatus e uptime como em branco na saída. Alguém pode Por favor me ajude a obter o resultado usando "Get-VM | Select-Object-ExpanderProperty NetworkAdapters" e apontar o erro que estou fazendo aqui.

$clus = Read-Host 'Enter the Cluster Name'
$Nodes = Get-clusternode -Cluster $clus
foreach($Node in $Nodes)
          {
$VMs = Get-VM | Select-Object -ExpandProperty NetworkAdapters | Select VMName, IPAddresses, State
    foreach($VM in $VMs)
    {
       $results = [ordered]@{

            'NodeName' = $Node;    
            'VMName' = $VM.VMName; 
            'IPaddress' = $VM.IPAddresses[0];
            'Status' = $VM.State;
            'AdapterStatus' = $VM.Status[0];
            'OSStatus' = $VM.OSStatus;
            'Uptime' = $VM.Uptime
            }
    $Output = New-Object -TypeName PSObject -Property $results
    Write-Output $Output
        } 
    }

Também gostaria de saber se podemos ter saída de loops foreach separados e colocá-los em uma matriz e formatá-los para saída no final da saída.

Abaixo está o resultado que estou recebendo. Em branco para OSStatus e Uptime.

NodeName      : ABC
VMName        : System1
IPaddress     : 192.168.1.6
Status        : Running
AdapterStatus : Degraded
OSStatus      : 
Uptime        : 

NodeName      : ABC
VMName        : System2
IPaddress     : 192.168.1.7
Status        : Running
AdapterStatus : Degraded
OSStatus      : 
Uptime        : 

NodeName      : ABC
VMName        : System3
IPaddress     : 192.168.1.8
Status        : Running
AdapterStatus : Degraded
OSStatus      : 
Uptime        : 
    
por CuriousPiyush 23.09.2018 / 13:04

1 resposta

0

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 de New-Object ou [ordered]
  • Coloque a variável $results antes do ciclo foreach
  • Adicionado | ft -Autosize ao seu Write-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 seu Get-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 dizer OperationalStatus . 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
    
por 24.09.2018 / 13:22