web-dev-qa-db-fra.com

PowerShell: Comment renvoyer tous les ordinateurs virtuels d'un cluster Hyper-V

Je suis programmeur pour la première fois avec PowerShell. En cours d'exécution sur Windows Server 2012.

J'essaie d'obtenir une liste de toutes les machines virtuelles de mon cluster de basculement et je travaille avec ceci:

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

Et cela retourne un tas d'erreurs

Cependant, cela fonctionne parfaitement bien

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

Est-ce que cela échoue parce que Get-ClusterNode | sélectionnez Nom renvoie le texte suivant?

Name
----
server1
server2
server3
server4

avec un titre et un soulignement?

6
Paul S.

Donnez un coup de feu:

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

Vous devez référencer la propriété Name des objets renvoyés par Get-ClusterNode.

4
Trevor Sullivan

Ces doublures sont peut-être un peu plus faciles. Works pour Windows Server 2012 R2, devrait fonctionner pour 2012.

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

Obtient essentiellement les nœuds du cluster appelé "CLUSTER". Liste des flux vers votre -ComputerName

OR

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

Obtient les groupes de cluster et les filtres pour le type appelé "VirtualMachine".

Avec l'un ou l'autre, vous pouvez exécuter Get-ClusterGroup au lieu de Get-ClusterGroup -Cluster CLUSTER si vous êtes sur l'un des nœuds.

2
ScraperDave

Je sais que cela a été répondu, mais j'aime mieux ce one-liner:

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

Ou si vous le faites à distance, référencez le cluster:

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

Les résultats peuvent être acheminés vers d'autres commandes, par exemple "Set-VMProcessor" ou d'autres.

1
Thomas Larsen

Vous pouvez également utiliser Get-ClusterResource puisqu'un rôle de machine virtuelle de cluster est une ressource de cluster.

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

Ensuite, Get-VM a également un paramètre -ClusterObject

Get-VM -ClusterObject $clusterResource

De TechNet -

-ClusterObject Spécifie la ressource de cluster ou le groupe de cluster de la machine virtuelle à récupérer.

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

1
cameracode

La sélection des propriétés d'un objet affichera l'en-tête. Vous pouvez contourner ce problème en canalisant cette liste dans une boucle qui affiche uniquement la valeur:

 $ clusterNodes = Get-ClusterNode | sélectionnez Nom | foreach {$ _. Name} [.________

Je n'ai pas testé spécifiquement avec votre code, mais j'ai eu le même problème la semaine dernière.

0
Steve

Je pense que le moyen le plus simple est:

Get-VM -ComputerName VMCLUSTERNAME

Cela renverra toutes les machines virtuelles de votre cluster. Parfois, un nom complet avec domaine est nécessaire.
Tout le monde a oublié que le cluster est visible en tant qu'ordinateur avec le rôle Hyper-V dans le domaine. Vous pouvez également accéder à d'autres rôles dans le cluster si vous envisagez d'utiliser le cluster en tant qu'ordinateur normal avec les rôles qui y sont installés.
(Cela fonctionne parfaitement sur powershell dans Server 2016)

0
Tymek