Benötigen Sie Hilfe beim Abrufen von Informationen von HyperV-Knoten mithilfe von Powershell

355
CuriousPiyush

Unten ist mein Skript zum Abrufen der Informationen. Ich bekomme OSStatus und Uptime als leer in der Ausgabe. Kann jemand Bitte helfen Sie mir, die Ausgabe mit "Get-VM | Select-Object -ExpandProperty NetworkAdapters" abzurufen und weisen Sie darauf hin, welchen Fehler ich hier mache.

$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 }  } 

Ich würde auch gerne wissen, ob wir die Ausgabe von separaten foreach-Schleifen haben können, sie in ein Array setzen und am Ende der Ausgabe für die Ausgabe formatieren können.

Unten ist der Output, den ich bekomme. Leerzeichen für OSStatus und 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 :  
0

1 Antwort auf die Frage

0
SimonS

Es scheint, dass einige Informationen, die Sie benötigen, in der Ausgabe enthalten sind Get-VMund verloren gehen, wenn Sie nur die NetworkAdapters-Eigenschaft auswählen. Deshalb habe ich es unten geändert. Es läuft jetzt über die VMs und wählt die NetworkAdapters-Eigenschaft während der Schleife aus.

Ich auch:

  • Setze alles PSCustomObjectdirekt ein, also keine Notwendigkeit New-Objectoder[ordered]
  • Setzen Sie die $resultsVariable vor die foreachSchleife
  • Zu | ft -AutosizeIhrem Write-OutputFormat hinzugefügt, so dass Sie es wie gewünscht formatieren können (wenn Sie die Ausgabe des Skripts in Ihrem Skript weiter verwenden möchten, entfernen Sie es | ft -autosizeerneut, es ist nur aus kosmetischen Gründen von Vorteil)
  • Spezifiziert die ClusterObjectin Ihrem Get-VM- ich bin nicht so sicher, dass ich da nicht mit Clustern arbeiten, aber ich denke, Sie diese Informationen angeben müssen, sonst wäre es nur lokale VM gelesen, nie von einem Remote - Cluster.
  • Es gab kein Eigentum für OSStatus. Ich glaube, du gemeint OperationalStatus. Ich habe es geändert.

Hier ist der Code

$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 
Vielen Dank, Simon. Es funktioniert und klärt auch meine Zweifel. CuriousPiyush vor 5 Jahren 0