it-swarm.com.de

PowerShell: So geben Sie alle VMs in einem Hyper-V-Cluster zurück

Ich bin zum ersten Mal Programmierer bei PowerShell. Läuft unter Windows Server 2012.

Ich versuche, eine Liste aller VMs in meinem Failover-Cluster abzurufen, und arbeite damit:

$clusterNodes = Get-ClusterNode | select Name 
ForEach($item in $clusterNodes)
{Get-VM -ComputerName $item}

Und dies führt zu einer Reihe von Fehlern

Dies funktioniert jedoch einwandfrei

$hosts = "server1", "server2", "server3", "server4"
ForEach($item in $hosts)
{Get-VM -ComputerName $item}

Schlägt dies fehl, weil Get-ClusterNode | select Name gibt Folgendes zurück?

Name
----
server1
server2
server3
server4

mit Überschrift und Unterstreichung?

6
Paul S.

Probieren Sie es aus:

$clusterNodes = Get-ClusterNode;
ForEach($item in $clusterNodes)
{Get-VM -ComputerName $item.Name; }

Sie müssen auf die Eigenschaft Name der von Get-ClusterNode zurückgegebenen Objekte verweisen.

4
Trevor Sullivan

Diese Einlagen sind vielleicht etwas einfacher. Funktioniert für Windows Server 2012 R2, sollte für 2012 funktionieren.

Get-VM –ComputerName (Get-ClusterNode –Cluster CLUSTER)

Grundsätzlich bekommt der Knoten aus dem Cluster den Namen "CLUSTER". Feeds-Liste zu Ihrem -ComputerName

OR

Get-ClusterGroup -Cluster CLUSTER | ? {$_.GroupType –eq 'VirtualMachine' } | Get-VM

Ruft die Clustergruppen und Filter für den Typ "VirtualMachine" ab.

Mit beiden können Sie Get-ClusterGroup anstelle von Get-ClusterGroup -Cluster CLUSTER ausführen, wenn Sie sich auf einem der Knoten befinden.

2
ScraperDave

Ich weiß, dass dies beantwortet wurde, aber ich mag diesen Einzeiler besser:

Get-VM -ClusterObject (Get-ClusterResource | where ResourceType -eq "Virtual Machine")

Oder verweisen Sie auf das Cluster, wenn Sie es remote ausführen:

Get-VM -ClusterObject (Get-ClusterResource -Cluster name-of-cluster | where ResourceType -eq "Virtual Machine")

Die Ergebnisse können in andere Befehle geleitet werden, beispielsweise "Set-VMProcessor" oder andere.

1
Thomas Larsen

Sie können auch Get-ClusterResource verwenden, da eine Cluster-VM-Rolle eine Cluster-Ressource ist.

$clusterResource = Get-ClusterResource -Cluster SomeClusterName | Where ResourceType -eq "Virtual Machine"

Dann hat Get-VM auch einen -ClusterObject-Parameter

Get-VM -ClusterObject $clusterResource

Aus TechNet -

-ClusterObject Gibt die Clusterressource oder Clustergruppe der abzurufenden virtuellen Maschine an.

https://technet.Microsoft.com/en-us/library/hh848479.aspx

1
cameracode

Wenn Sie Eigenschaften aus einem Objekt auswählen, wird die Kopfzeile angezeigt. Sie können das umgehen, indem Sie diese Liste an eine Schleife weiterleiten, die nur den Wert ausgibt:

 $ clusterNodes = Get-ClusterNode | Wählen Sie Name | foreach {$ _. Name} 
 ForEach ($ item in $ clusterNodes) 
 {Get-VM -ComputerName $ item} 

Ich habe nicht speziell mit Ihrem Code getestet, aber ich hatte das gleiche Problem letzte Woche.

0
Steve

Ich denke, der einfachste Weg ist:

Get-VM -ComputerName VMCLUSTERNAME

Dadurch werden alle VMs aus Ihrem Cluster zurückgegeben. Manchmal ist ein vollständiger Name mit Domain erforderlich.
Jeder hat vergessen, dass der Cluster als Computer mit der Rolle Hyper-V in der Domäne angezeigt wird. Sie können auch auf andere Rollen im Cluster zugreifen, wenn Sie sich das Cluster als normalen Computer mit den dort installierten Rollen vorstellen.
(Dies funktioniert perfekt auf Powershell in Server 2016)

0
Tymek