Besoin d'aide pour récupérer des informations à partir de nœuds HyperV à l'aide de Powershell

0

Ci-dessous mon script pour aller chercher l'information. J'obtiens OSStatus et la disponibilité comme vierges dans la sortie. S'il vous plaît, aidez-moi à obtenir le résultat en utilisant "Get-VM | Select-Object -ExpandProperty NetworkAdapters" et indiquez mon erreur ici.

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

J'aimerais également savoir si nous pouvons avoir une sortie de boucles foreach distinctes, la placer dans un tableau et la formater pour une sortie à la fin de la sortie.

Ci-dessous, la sortie que je reçois. Blanc pour OSStatus et 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        : 
CuriousPiyush
la source

Réponses:

0

Il semble que certaines informations dont vous avez besoin se trouvent dans la sortie de Get-VM et se perd lorsque vous sélectionnez uniquement la propriété NetworkAdapters. C'est pourquoi je l'ai changé ci-dessous. il boucle maintenant sur la VM et sélectionne la propriété NetworkAdapters pendant la boucle.

Moi aussi:

  • Tout mettre dans un PSCustomObject directement, donc pas besoin de New-Object ou [ordered]
  • Mettre le $results Variable avant le foreach boucle
  • Ajoutée | ft -Autosize à ton Write-Output il le formate comme vous le souhaitez (si vous souhaitez utiliser la sortie du script plus loin dans votre script, supprimez | ft -autosize encore une fois, c'est seulement bon pour des raisons esthétiques)
  • Spécifié le ClusterObject dans ton Get-VM - Je n'en suis pas si sûr car je ne travaille pas avec des clusters, mais je pense que vous devez spécifier cette information, sinon le système ne lirait que les VM locales, jamais depuis un cluster distant.
  • Il n'y avait pas de propriété pour OSStatus. Je pense que tu voulais dire OperationalStatus. Je l'ai changé pour ça.

Voici le 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
SimonS
la source
Merci beaucoup Simon. Cela fonctionne et efface mon doute aussi.
CuriousPiyush