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?
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
.
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.
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.
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.
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.
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)