Question
[RESOLU] Listing des VM HyperV dans un cluster
- Zedd
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 45
- Remerciements reçus 0
il y a 13 ans 9 mois #12495
par Zedd
[RESOLU] Listing des VM HyperV dans un cluster a été créé par Zedd
Bonjour,
Je cherche à lister les VM dans un cluster, plus exactement à savoir sur quel serveur la VM est active à l'instant où je lance le script.
Avant, je n'avais que deux serveurs HyperV qui n'étaient pas en cluster, et j'utilisais ceci :
[code:1]
#Variables\"
$ServerSource = \"nvhyperv01\"
$VMSource = \"NvCompta\"
$VMchemin = \"C:\scripts\\"
$Journal = $VMchemin + $VMSource + '.txt'
#########################################################################################################
#Lecture de l'état de la VM à cloner pour savoir si on continu ou non le script
#########################################################################################################
\"Lecture de l'etat à \" + (get-date).tostring(‘hh:mm:«»ss’) >> $Journal
$VMList = Get-WmiObject -Namespace root\virtualization Msvm_ComputerSystem -ComputerName $ServerSource
$VMList = $VMList | Where-Object {$_.ElementName -eq $VMSource}
$VMList | Format-Table ElementName,EnabledState -Autosize >> $Journal[/code:1]
Aujourd'hui, c'est un peu plus compliqué, puisque dans un cluster, la VM n'est pas associée directement à un serveur. (si le serveur prioritaire d'une VM est injoignable pour une raison X ou Y, la VM fonctionnera sur un autre serveur).
J'ai imaginé la chose suivante, mais ça ne marche pas super bien ^^
[code:1]####################################################
# Paramétrage
####################################################
# Paramétrage Dossier
$BackupFolder = \"\\nvhyperv01\h$\"
# Paramétrage VM
$VMName = \"NvCompta\"
$Journal = 'C:\Script_test\journal.txt'
# Test de présence de la VM sur un serveur
foreach ($server in ${C:\script_test\servers.txt}) {
$VMList = Get-WmiObject -Namespace root\virtualization Msvm_ComputerSystem -ComputerName $Server
$VMList = $VMList | Where-Object {$_.ElementName -eq $VMName}
$VMList | Format-Table __Server,ElementName,EnabledState -Autosize >> $Journal
$Serversource = $VMList | Where-Object {$_.__Server -ne \"\"}
if ($VMList | Where-Object {$_.__Server -eq $server}) { $Serversource = \"$server\" }
}
echo $Serversource[/code:1]
Le fichier C:\script_test\servers.txt contient la liste de tous les serveurs du cluster.
J'ai testé ça qui marche un peu mieux, mais c'est cochon :
[code:1]$VMList = Get-WmiObject -Namespace root\virtualization Msvm_ComputerSystem -ComputerName nvhyperv03
$VMList = $VMList | Where-Object {$_.ElementName -eq $VMName}
$VMList | Format-Table __Server,ElementName,EnabledState -Autosize > $Journal
$Serversource = $VMList | Where-Object {$_.__Server -ne ''}
if ($VMList | Where-Object {$_.__Server -eq \"NVHYPERV01\"}) { $Serversource = \"nvhyperv01\" }
if ($VMList | Where-Object {$_.__Server -eq \"NVHYPERV02\"}) { $Serversource = \"nvhyperv02\" }
if ($VMList | Where-Object {$_.__Server -eq \"NVHYPERV03\"}) { $Serversource = \"nvhyperv03\" }
if ($VMList | Where-Object {$_.__Server -eq \"NVHYPERV04\"}) { $Serversource = \"nvhyperv04\" }
echo $Serversource
[/code:1]
Une idée pour faire du propre et pas du cochon ?
Mon but est d'arriver à placer le nom du serveur actif en variable, pour la suite de mon script.
Cdt,
Zedd<br><br>Message édité par: Zedd, à: 13/08/12 16:31
Je cherche à lister les VM dans un cluster, plus exactement à savoir sur quel serveur la VM est active à l'instant où je lance le script.
Avant, je n'avais que deux serveurs HyperV qui n'étaient pas en cluster, et j'utilisais ceci :
[code:1]
#Variables\"
$ServerSource = \"nvhyperv01\"
$VMSource = \"NvCompta\"
$VMchemin = \"C:\scripts\\"
$Journal = $VMchemin + $VMSource + '.txt'
#########################################################################################################
#Lecture de l'état de la VM à cloner pour savoir si on continu ou non le script
#########################################################################################################
\"Lecture de l'etat à \" + (get-date).tostring(‘hh:mm:«»ss’) >> $Journal
$VMList = Get-WmiObject -Namespace root\virtualization Msvm_ComputerSystem -ComputerName $ServerSource
$VMList = $VMList | Where-Object {$_.ElementName -eq $VMSource}
$VMList | Format-Table ElementName,EnabledState -Autosize >> $Journal[/code:1]
Aujourd'hui, c'est un peu plus compliqué, puisque dans un cluster, la VM n'est pas associée directement à un serveur. (si le serveur prioritaire d'une VM est injoignable pour une raison X ou Y, la VM fonctionnera sur un autre serveur).
J'ai imaginé la chose suivante, mais ça ne marche pas super bien ^^
[code:1]####################################################
# Paramétrage
####################################################
# Paramétrage Dossier
$BackupFolder = \"\\nvhyperv01\h$\"
# Paramétrage VM
$VMName = \"NvCompta\"
$Journal = 'C:\Script_test\journal.txt'
# Test de présence de la VM sur un serveur
foreach ($server in ${C:\script_test\servers.txt}) {
$VMList = Get-WmiObject -Namespace root\virtualization Msvm_ComputerSystem -ComputerName $Server
$VMList = $VMList | Where-Object {$_.ElementName -eq $VMName}
$VMList | Format-Table __Server,ElementName,EnabledState -Autosize >> $Journal
$Serversource = $VMList | Where-Object {$_.__Server -ne \"\"}
if ($VMList | Where-Object {$_.__Server -eq $server}) { $Serversource = \"$server\" }
}
echo $Serversource[/code:1]
Le fichier C:\script_test\servers.txt contient la liste de tous les serveurs du cluster.
J'ai testé ça qui marche un peu mieux, mais c'est cochon :
[code:1]$VMList = Get-WmiObject -Namespace root\virtualization Msvm_ComputerSystem -ComputerName nvhyperv03
$VMList = $VMList | Where-Object {$_.ElementName -eq $VMName}
$VMList | Format-Table __Server,ElementName,EnabledState -Autosize > $Journal
$Serversource = $VMList | Where-Object {$_.__Server -ne ''}
if ($VMList | Where-Object {$_.__Server -eq \"NVHYPERV01\"}) { $Serversource = \"nvhyperv01\" }
if ($VMList | Where-Object {$_.__Server -eq \"NVHYPERV02\"}) { $Serversource = \"nvhyperv02\" }
if ($VMList | Where-Object {$_.__Server -eq \"NVHYPERV03\"}) { $Serversource = \"nvhyperv03\" }
if ($VMList | Where-Object {$_.__Server -eq \"NVHYPERV04\"}) { $Serversource = \"nvhyperv04\" }
echo $Serversource
[/code:1]
Une idée pour faire du propre et pas du cochon ?
Mon but est d'arriver à placer le nom du serveur actif en variable, pour la suite de mon script.
Cdt,
Zedd<br><br>Message édité par: Zedd, à: 13/08/12 16:31
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 13 ans 9 mois #12501
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Listing des VM HyperV dans un cluster
Bonjour,
Sans directement répondre à ta question, d'après ta dernière question posée sur ce forum, tu connais l'existance du module Hyper-V qui 'wrap' les commandes WMI pour la gestion d'une infra Hyper-V.
Il permet notamment de simplifier le code en fournissant des Cmdlets PowerShell ... qui font moins cochon
@ +
Matthew
Une idée pour faire du propre et pas du cochon ?
Sans directement répondre à ta question, d'après ta dernière question posée sur ce forum, tu connais l'existance du module Hyper-V qui 'wrap' les commandes WMI pour la gestion d'une infra Hyper-V.
Il permet notamment de simplifier le code en fournissant des Cmdlets PowerShell ... qui font moins cochon
@ +
Matthew
Connexion ou Créer un compte pour participer à la conversation.
- Zedd
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 45
- Remerciements reçus 0
il y a 13 ans 9 mois #12514
par Zedd
Réponse de Zedd sur le sujet Re:Listing des VM HyperV dans un cluster
Salut,
merci pour la réponse, mais une réponse directe aurait été mieux
je suis une quiche en powershell et j'improvise avec ce que je trouve sur la toile.
Je fais plus du puzzle de code des autres que de la réelle écriture de code^^
Et pour info, à part le ptit wrap de chez Mcdo.. wrap, connais pas
merci pour la réponse, mais une réponse directe aurait été mieux
je suis une quiche en powershell et j'improvise avec ce que je trouve sur la toile.
Je fais plus du puzzle de code des autres que de la réelle écriture de code^^
Et pour info, à part le ptit wrap de chez Mcdo.. wrap, connais pas
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 13 ans 9 mois #12515
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Listing des VM HyperV dans un cluster
Salut,
le truc qui me fait tiquer c'est les quatres instructions IF.
Ne connaissant pas le clustering, ta variable $VMList peut contenir des VM provenant de + serveurs ou toutes sont oblgatoirement sur le même ?<br><br>Message édité par: Laurent Dardenne, à: 10/08/12 15:05
le truc qui me fait tiquer c'est les quatres instructions IF.
Ne connaissant pas le clustering, ta variable $VMList peut contenir des VM provenant de + serveurs ou toutes sont oblgatoirement sur le même ?<br><br>Message édité par: Laurent Dardenne, à: 10/08/12 15:05
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Zedd
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 45
- Remerciements reçus 0
il y a 13 ans 9 mois #12516
par Zedd
Réponse de Zedd sur le sujet Re:Listing des VM HyperV dans un cluster
En gros (en tres gros), un cluster est un groupe de serveur reliés entre eux qui vont assurer la disponibilité de tes VM.
Chaque VM est associée à 1 serveur, mais si tu retires le câble d'alimentation du serveur par exemple, son voisin attrape la VM et la fait fonctionner.
Le tout sans coupure de service sur la VM.
L’inconvenant dans ce genre de cas, C'est que ta VM n'est plus rattachée à 1 serveur indépendant, mais peut potentiellement se balader d'un serveur à l'autre.
Le but c'est d'aller fouiller chaque serveur du cluster pour savoir sur lequel se trouve la VM désirée.
J'ai un peu progressé cette aprèm, et je coince à un truc tout bête.. voici mon bout de script :
####################################################
# Paramétrage
####################################################
# Paramétrage VM
$VMName = \"xptestbis\"
# Paramétrage Dossier
$Backup = \"C:\ClusterStorage\Volume2\Backup\\"
$Journal = 'C:\Script_test\journal.txt'
#ce module n'est semble-t-il présent que sur les
#machines avec le rôle FAilOver installé
Import-Module FailoverClusters
cls
# Je liste TOUTES les VM de mon cluster
$VMGroups = Get-ClusterGroup | ?{ $_ | Get-ClusterResource | ?{ $_.ResourceType -like \"Virtual Machine\" }}
echo $VMGroups
#Je filtre pour n'avoir QUE la VM voulue
$VM = $VMGroups | Where-Object {$_.Name -eq $VMName}
#J'affiche le serveur sur lequel elle est
echo $VM.ownernode.name
#Et la je coince.. ce que je vois en echo au dessus
#ne veut pas se mettre en variable ci-dessous..
$ServeurSource = $VM.ownernode.name
#du coup, l'echo n'echo rien :/
echo $ServerSource
Chaque VM est associée à 1 serveur, mais si tu retires le câble d'alimentation du serveur par exemple, son voisin attrape la VM et la fait fonctionner.
Le tout sans coupure de service sur la VM.
L’inconvenant dans ce genre de cas, C'est que ta VM n'est plus rattachée à 1 serveur indépendant, mais peut potentiellement se balader d'un serveur à l'autre.
Le but c'est d'aller fouiller chaque serveur du cluster pour savoir sur lequel se trouve la VM désirée.
J'ai un peu progressé cette aprèm, et je coince à un truc tout bête.. voici mon bout de script :
####################################################
# Paramétrage
####################################################
# Paramétrage VM
$VMName = \"xptestbis\"
# Paramétrage Dossier
$Backup = \"C:\ClusterStorage\Volume2\Backup\\"
$Journal = 'C:\Script_test\journal.txt'
#ce module n'est semble-t-il présent que sur les
#machines avec le rôle FAilOver installé
Import-Module FailoverClusters
cls
# Je liste TOUTES les VM de mon cluster
$VMGroups = Get-ClusterGroup | ?{ $_ | Get-ClusterResource | ?{ $_.ResourceType -like \"Virtual Machine\" }}
echo $VMGroups
#Je filtre pour n'avoir QUE la VM voulue
$VM = $VMGroups | Where-Object {$_.Name -eq $VMName}
#J'affiche le serveur sur lequel elle est
echo $VM.ownernode.name
#Et la je coince.. ce que je vois en echo au dessus
#ne veut pas se mettre en variable ci-dessous..
$ServeurSource = $VM.ownernode.name
#du coup, l'echo n'echo rien :/
echo $ServerSource
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 13 ans 9 mois #12518
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Listing des VM HyperV dans un cluster
[code:1]$ServeurSource = $VM.ownernode.name
#du coup, l'echo n'echo rien :/
echo $ServerSource[/code:1]
Une erreur de syntaxe ?
il manque un \"u\" ici :
[code:1]echo $ServerSource[/code:1]
parce que là il y a le \"u\" dans \"Serveur\" :
[code:1]$ServeurSource = $VM.ownernode.name[/code:1]
#du coup, l'echo n'echo rien :/
echo $ServerSource[/code:1]
Une erreur de syntaxe ?
il manque un \"u\" ici :
[code:1]echo $ServerSource[/code:1]
parce que là il y a le \"u\" dans \"Serveur\" :
[code:1]$ServeurSource = $VM.ownernode.name[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.044 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [RESOLU] Listing des VM HyperV dans un cluster