Question
Shutdown VM sous Vmware
- MEY Patrick
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
il y a 6 ans 6 jours #24296
par MEY Patrick
Shutdown VM sous Vmware a été créé par MEY Patrick
Salut la team,
J'espère que vous allez bien.
Je viens vers vous pour un souci que j'ai pour scripter l'arrêt de machines virtuelles sous VMware mais dans un ordre précis.
Voici l'ébauche du script :
[code:1]
$vmFoldertest1 = Get-Folder \"__test1\" | get-vm | Where-Object {$_.powerstate -eq 'PoweredOn'}
shutdown-VMGuest $vmFoldertest1 -confirm:$false
$vmFoldertest2 = Get-Folder \"__test2\" | get-vm | Where-Object {$_.powerstate -eq 'PoweredOn'}
if ($vmFoldertest1.Powerstate -eq 'PoweredOff')
{
shutdown-VMGuest $vmFoldertest2 -confirm:$false
}
else
{
Write-host \"VM: \" $vmFoldertest1 \"is powered off !!!\"
Write-host \"VM: \" $vmFoldertest2 \"is powered off !!!\"
}
[/code:1]
J'aimerais arrêter les VM se trouvant dans le folder 2 mais uniquement lorsque les VM du folder 1 sont OFF.
Le but est de vraiment arrêter les VM suivantes lorsque les précédentes sont OFF.
Mais lorsque le script arrive sur le test du folder 2, les VM du folder 1 sont encore ON et du coup il ne fait rien.
Comment s'y prendre ? mettre des tempo ? mais je ne connais pas les temps d'arrêt de mes serveurs...et j'ai plusieurs folders comme cela avec des dizaines de VM dedans.
Il faudrait que je passe au folder suivant seulement lorsque toutes les VM du folder précédent sont OFF.
Merci
Patrick
Si quelqu'un peut m'aider.....
J'espère que vous allez bien.
Je viens vers vous pour un souci que j'ai pour scripter l'arrêt de machines virtuelles sous VMware mais dans un ordre précis.
Voici l'ébauche du script :
[code:1]
$vmFoldertest1 = Get-Folder \"__test1\" | get-vm | Where-Object {$_.powerstate -eq 'PoweredOn'}
shutdown-VMGuest $vmFoldertest1 -confirm:$false
$vmFoldertest2 = Get-Folder \"__test2\" | get-vm | Where-Object {$_.powerstate -eq 'PoweredOn'}
if ($vmFoldertest1.Powerstate -eq 'PoweredOff')
{
shutdown-VMGuest $vmFoldertest2 -confirm:$false
}
else
{
Write-host \"VM: \" $vmFoldertest1 \"is powered off !!!\"
Write-host \"VM: \" $vmFoldertest2 \"is powered off !!!\"
}
[/code:1]
J'aimerais arrêter les VM se trouvant dans le folder 2 mais uniquement lorsque les VM du folder 1 sont OFF.
Le but est de vraiment arrêter les VM suivantes lorsque les précédentes sont OFF.
Mais lorsque le script arrive sur le test du folder 2, les VM du folder 1 sont encore ON et du coup il ne fait rien.
Comment s'y prendre ? mettre des tempo ? mais je ne connais pas les temps d'arrêt de mes serveurs...et j'ai plusieurs folders comme cela avec des dizaines de VM dedans.
Il faudrait que je passe au folder suivant seulement lorsque toutes les VM du folder précédent sont OFF.
Merci
Patrick
Si quelqu'un peut m'aider.....

Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6294
- Remerciements reçus 67
il y a 6 ans 5 jours #24297
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Shutdown VM sous Vmware
Salut,
dans un premier temps une boucle while avec une temporisation peut t'aider.
Regarde si tu as un paramètre -wait sur le cmdlet d'arrêt de Vm ou un event.
dans un premier temps une boucle while avec une temporisation peut t'aider.
Regarde si tu as un paramètre -wait sur le cmdlet d'arrêt de Vm ou un event.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- MEY Patrick
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
il y a 6 ans 5 jours #24298
par MEY Patrick
Réponse de MEY Patrick sur le sujet Re:Shutdown VM sous Vmware
Alors j'ai fait ça (bon j'ai qu'une seule VM dans le folder pour le moment)
Mais j'arrive pas à sortir de la boucle
[code:1]
#######################################
# Séquence d'arrêt des VM des folders #
#######################################
$VMFOLDER1 = Get-Folder \"__test1\" | Get-VM
# | Where-Object {$_.powerstate -eq 'PoweredOn'}
#Shutting down Guest
Write-host \"Shutting Down Guest on\" $VMFOLDER1
$VMFOLDER1 | Shutdown-VMGuest
#Waiting for Shutdownn to complete
#Write-host \"Waiting for Shutdown to complete\"
Do
{
Write-Host \"Waiting on shutdown for VM: \" $VMFOLDER1
#Check the power status
$Status = $VMFOLDER1.Powerstate
Write-Host \"PowerStatus is:\" $Status
sleep 5
} until($VMFOLDER1.Powerstate -eq 'PoweredOff')
Write-host \"Séquence arrêt terminée !!!\"
[/code:1]<br><br>Message édité par: shinobi, à: 24/09/17 18:39
Mais j'arrive pas à sortir de la boucle

[code:1]
#######################################
# Séquence d'arrêt des VM des folders #
#######################################
$VMFOLDER1 = Get-Folder \"__test1\" | Get-VM
# | Where-Object {$_.powerstate -eq 'PoweredOn'}
#Shutting down Guest
Write-host \"Shutting Down Guest on\" $VMFOLDER1
$VMFOLDER1 | Shutdown-VMGuest
#Waiting for Shutdownn to complete
#Write-host \"Waiting for Shutdown to complete\"
Do
{
Write-Host \"Waiting on shutdown for VM: \" $VMFOLDER1
#Check the power status
$Status = $VMFOLDER1.Powerstate
Write-Host \"PowerStatus is:\" $Status
sleep 5
} until($VMFOLDER1.Powerstate -eq 'PoweredOff')
Write-host \"Séquence arrêt terminée !!!\"
[/code:1]<br><br>Message édité par: shinobi, à: 24/09/17 18:39
Connexion ou Créer un compte pour participer à la conversation.
- MEY Patrick
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
il y a 6 ans 4 jours #24300
par MEY Patrick
Réponse de MEY Patrick sur le sujet Re:Shutdown VM sous Vmware
En réalité il semble reboucler sur l'état qui me dit que la VM est ON....alors qu'elle est bien arrêtée.
Je ne saisis pas mais je suis sûr de ne pas être très loin.
Je ne saisis pas mais je suis sûr de ne pas être très loin.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6294
- Remerciements reçus 67
il y a 6 ans 4 jours #24301
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Shutdown VM sous Vmware
L'opérateur -EQ à un comportement différent sur un tableau car il renvoie tous les éléments répondant au critére :
[code:1]
[psobject[]]$T=@(
[pscustomobject]@{
PSTypeName='vm';
Powerstate='PoweredOff'
}
[pscustomobject]@{
PSTypeName='vm';
Powerstate='PoweredOn'
}
[pscustomobject]@{
PSTypeName='vm';
Powerstate='PoweredOff'
}
)
$T.powerstate -eq 'PoweredOff'
#PoweredOff
#PoweredOff
[/code:1]
La condition Until n'est donc jamais true ou en tout cas ne fait pas ce que tu attends.
On doit rester dans la boucle tant que les vm ne sont pas toute éteinte. On utilise une méthode de la classe Array :
[code:1]
#Note : changer le type PSObject par le type de l'objet VM
[System.Predicate[psobject]] $Predicate={
param($Vm)
Write-Debug \"Vm=$($Vm.powerstate)\"
$Vm.powerstate -eq 'PoweredOff'
}
[array]::TrueForAll($T, $Predicate)
#DEBUG: Vm=PoweredOff
#DEBUG: Vm=PoweredOn
#False
[/code:1]
en l'état elle renvoie faux et s'arrête à la première Vm qui est à 'On'.
On change l'état et on recommence :
[code:1]
$T[1].Powerstate='PoweredOff'
[array]::TrueForAll($T, $Predicate)
#DEBUG: Vm=PoweredOff
#DEBUG: Vm=PoweredOff
#DEBUG: Vm=PoweredOff
#True
[/code:1]
La boucle d'attente devenant :
[code:1]
do {
write-host \"next\"
sleep 1
} until([array]::TrueForAll($T, $Predicate))
[/code:1]
On quitte donc lorsque toutes les machines sont dans l'état demandé
Bien évidement l'ajout d'une exception sur timer serait plus prudent.
Ceinture, bretelle, parachute...<br><br>Message édité par: Laurent Dardenne, à: 25/09/17 12:44
[code:1]
[psobject[]]$T=@(
[pscustomobject]@{
PSTypeName='vm';
Powerstate='PoweredOff'
}
[pscustomobject]@{
PSTypeName='vm';
Powerstate='PoweredOn'
}
[pscustomobject]@{
PSTypeName='vm';
Powerstate='PoweredOff'
}
)
$T.powerstate -eq 'PoweredOff'
#PoweredOff
#PoweredOff
[/code:1]
La condition Until n'est donc jamais true ou en tout cas ne fait pas ce que tu attends.
On doit rester dans la boucle tant que les vm ne sont pas toute éteinte. On utilise une méthode de la classe Array :
[code:1]
#Note : changer le type PSObject par le type de l'objet VM
[System.Predicate[psobject]] $Predicate={
param($Vm)
Write-Debug \"Vm=$($Vm.powerstate)\"
$Vm.powerstate -eq 'PoweredOff'
}
[array]::TrueForAll($T, $Predicate)
#DEBUG: Vm=PoweredOff
#DEBUG: Vm=PoweredOn
#False
[/code:1]
en l'état elle renvoie faux et s'arrête à la première Vm qui est à 'On'.
On change l'état et on recommence :
[code:1]
$T[1].Powerstate='PoweredOff'
[array]::TrueForAll($T, $Predicate)
#DEBUG: Vm=PoweredOff
#DEBUG: Vm=PoweredOff
#DEBUG: Vm=PoweredOff
#True
[/code:1]
La boucle d'attente devenant :
[code:1]
do {
write-host \"next\"
sleep 1
} until([array]::TrueForAll($T, $Predicate))
[/code:1]
On quitte donc lorsque toutes les machines sont dans l'état demandé
Bien évidement l'ajout d'une exception sur timer serait plus prudent.
Ceinture, bretelle, parachute...<br><br>Message édité par: Laurent Dardenne, à: 25/09/17 12:44
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- MEY Patrick
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
il y a 6 ans 4 jours #24302
par MEY Patrick

Je crois que je suis largué lol
Euhh... je dois mettre les morceaux de code bout à bout c'est ça ?
Exemple si j'ai un folder VMware qui s'appelle VMFOLDER1 avec 15 VM dedans ? Avant de passer à VMFOLDER2 avec ses VM ?
Désolé je scripte depuis peu
Réponse de MEY Patrick sur le sujet Re:Shutdown VM sous Vmware

Je crois que je suis largué lol
Euhh... je dois mettre les morceaux de code bout à bout c'est ça ?
Exemple si j'ai un folder VMware qui s'appelle VMFOLDER1 avec 15 VM dedans ? Avant de passer à VMFOLDER2 avec ses VM ?
Désolé je scripte depuis peu

Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.055 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Shutdown VM sous Vmware