Question Shutdown VM sous Vmware

Plus d'informations
il y a 6 ans 6 mois #24296 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..... :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 ans 6 mois #24297 par Laurent Dardenne
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.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 ans 6 mois #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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 ans 6 mois #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.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 6 ans 6 mois #24301 par Laurent Dardenne
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 \&quot;Vm=$($Vm.powerstate)\&quot;
$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 \&quot;next\&quot;
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.

Plus d'informations
il y a 6 ans 6 mois #24302 par MEY Patrick
Réponse de MEY Patrick sur le sujet Re:Shutdown VM sous Vmware
:woohoo:

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.080 secondes
Propulsé par Kunena