Question
Test VM existe ou non
- Akil Mansour
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 12 ans 11 mois #14582
par Akil Mansour
Test VM existe ou non a été créé par Akil Mansour
Par défaut POWERCLI: Test VM existe ou non
Bonjour,
J'espère tout d'abord être dans la bonne sous-catégorie du forum. Je suis un novice en powershell et je suis en train de réaliser un script, permettant de parcourir un fichier texte contenant des noms de VM et supprimer les VMs listée.
Simplement, je souhaiterais que le script me fasse les retour suivant:
- si la VM existe ou pas (erreur de nom)
- quand la VM a été supprimée
Voici mon code assez basique. Et je n'arrive pas à faire le test de si la VM existe ou pas...
[code:1]#Connection au vcenter
connect-viserver $vCenter
#Variables
$content = Get-Content D:\Sources\Scripts\delvm.txt
$vms = Get-VM -Name $content -ErrorAction SilentlyContinue
$Result = @()
$date = get-date
#Logique
ForEach ($vm in $vms){
if ($vm -ne $null){
$vmdel = \"\" | Select-Object VM, Deleted, Description
$vmdel.VM = $vm.name
$vmdel.Deleted = $date
$vmdel.Description = \"VM supprimée\"
# Remove-VM $vms -DeletePermanently -Confirm:$false
}
Else{
$vmdel = \"\" | Select-Object VM, Deleted, Description
$vmdel.VM = \"\"
$vmdel.Deleted = \"n/a\"
$vmdel.Description = \"La VM n'existe pas\"
}
$Result+=$vmdel
}[/code:1]
J'ai l'impression que ma boucle if est mal placée ou est mal construite. Peut être que la variable $content ne récupère pas les bonnes infos... Enfin bref je ne vois plus...
Si quelqu'un de doué peut m'aider.
Merci d'avance.
Bonjour,
J'espère tout d'abord être dans la bonne sous-catégorie du forum. Je suis un novice en powershell et je suis en train de réaliser un script, permettant de parcourir un fichier texte contenant des noms de VM et supprimer les VMs listée.
Simplement, je souhaiterais que le script me fasse les retour suivant:
- si la VM existe ou pas (erreur de nom)
- quand la VM a été supprimée
Voici mon code assez basique. Et je n'arrive pas à faire le test de si la VM existe ou pas...
[code:1]#Connection au vcenter
connect-viserver $vCenter
#Variables
$content = Get-Content D:\Sources\Scripts\delvm.txt
$vms = Get-VM -Name $content -ErrorAction SilentlyContinue
$Result = @()
$date = get-date
#Logique
ForEach ($vm in $vms){
if ($vm -ne $null){
$vmdel = \"\" | Select-Object VM, Deleted, Description
$vmdel.VM = $vm.name
$vmdel.Deleted = $date
$vmdel.Description = \"VM supprimée\"
# Remove-VM $vms -DeletePermanently -Confirm:$false
}
Else{
$vmdel = \"\" | Select-Object VM, Deleted, Description
$vmdel.VM = \"\"
$vmdel.Deleted = \"n/a\"
$vmdel.Description = \"La VM n'existe pas\"
}
$Result+=$vmdel
}[/code:1]
J'ai l'impression que ma boucle if est mal placée ou est mal construite. Peut être que la variable $content ne récupère pas les bonnes infos... Enfin bref je ne vois plus...
Si quelqu'un de doué peut m'aider.
Merci d'avance.
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 12 ans 11 mois #14591
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Test VM existe ou non
Bonsoir,
Pour commencer, quelque chose de simple.
Un fichier texte contenant des noms de VM : vms.txt.
Quelques tests, pour contrôler si un nom de VM se trouve bien dans la liste :
[code:1]PS> Get-Content .\vms.txt
vm1
vm2
vm3
vm4
mavm
vm5
vm6
vm7
vm8
PS> $vms = Get-Content .\vms.txt
PS> $vms -contains \"vm\"
False
PS> $vms -contains \"vm8\"
True
PS> $vms -contains \"mav\"
False
PS> $vms -contains \"mavm\"
True
[/code:1]
Une autre astuce, simple également, pour transformer le résultat de Get-Content (un tableau de chaines de caractères) en une collection Une collection qui va ensuite nous permettre de supprimer l'un des membres de cette collection :
[code:1]
PS>$vms = Get-Content .\vms.txt
PS>$ArrayList = New-Object System.Collections.ArrayList
PS>$ArrayList.AddRange($vms)
PS> $ArrayList
vm1
vm2
vm3
vm4
mavm
vm5
vm6
vm7
vm8
PS> $ArrayList.Remove(\"vm1\"«»)
PS> $ArrayList
vm2
vm3
vm4
mavm
vm5
vm6
vm7
vm8
PS> $ArrayList | Out-File .\vms.txt
#exporte la nouvelle collection dans le fichier texte
PS> get-content .\vms.txt
vm2
vm3
vm4
mavm
vm5
vm6
vm7
vm8[/code:1]
Edit : En te relisant, je ne sais pas si je comprends complétement ce que tu demandes. Peut être que cela va t'aider, mais rien n'est moins sur :/
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 17/04/13 21:21
Pour commencer, quelque chose de simple.
Un fichier texte contenant des noms de VM : vms.txt.
Quelques tests, pour contrôler si un nom de VM se trouve bien dans la liste :
[code:1]PS> Get-Content .\vms.txt
vm1
vm2
vm3
vm4
mavm
vm5
vm6
vm7
vm8
PS> $vms = Get-Content .\vms.txt
PS> $vms -contains \"vm\"
False
PS> $vms -contains \"vm8\"
True
PS> $vms -contains \"mav\"
False
PS> $vms -contains \"mavm\"
True
[/code:1]
Une autre astuce, simple également, pour transformer le résultat de Get-Content (un tableau de chaines de caractères) en une collection Une collection qui va ensuite nous permettre de supprimer l'un des membres de cette collection :
[code:1]
PS>$vms = Get-Content .\vms.txt
PS>$ArrayList = New-Object System.Collections.ArrayList
PS>$ArrayList.AddRange($vms)
PS> $ArrayList
vm1
vm2
vm3
vm4
mavm
vm5
vm6
vm7
vm8
PS> $ArrayList.Remove(\"vm1\"«»)
PS> $ArrayList
vm2
vm3
vm4
mavm
vm5
vm6
vm7
vm8
PS> $ArrayList | Out-File .\vms.txt
#exporte la nouvelle collection dans le fichier texte
PS> get-content .\vms.txt
vm2
vm3
vm4
mavm
vm5
vm6
vm7
vm8[/code:1]
Edit : En te relisant, je ne sais pas si je comprends complétement ce que tu demandes. Peut être que cela va t'aider, mais rien n'est moins sur :/
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 17/04/13 21:21
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 12 ans 11 mois #14592
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Test VM existe ou non
Autre chose de simple à tester :
[code:1]#Connection au vcenter
connect-viserver $vCenter
#Variables
$content = Get-Content D:\Sources\Scripts\delvm.txt
ForEach ($vm in $content){
if((Get-VM -Name $vm -ErrorAction SilentlyContinue) -ne $null){
# On supprime la VM
}
else{
# on fait autre chose, la VM n'a pas été trouvée
}
}[/code:1]
Je n'ai pas ce qu'il faut sous la main pour tester... et cela manque surement de code, mais c'est à tester.
[code:1]#Connection au vcenter
connect-viserver $vCenter
#Variables
$content = Get-Content D:\Sources\Scripts\delvm.txt
ForEach ($vm in $content){
if((Get-VM -Name $vm -ErrorAction SilentlyContinue) -ne $null){
# On supprime la VM
}
else{
# on fait autre chose, la VM n'a pas été trouvée
}
}[/code:1]
Je n'ai pas ce qu'il faut sous la main pour tester... et cela manque surement de code, mais c'est à tester.
Connexion ou Créer un compte pour participer à la conversation.
- SiSMik
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 492
- Remerciements reçus 0
il y a 12 ans 11 mois #14593
par SiSMik
Réponse de SiSMik sur le sujet Re:Test VM existe ou non
Salut,
C'esst ton if-else qui n'est pas bon à mon avis
[code:1]if ($vm -ne $null){[/code:1]
Ce code teste si $vù n'est pas null, ce qu'il ne sera jamais étant donné que $vm est un élément de la collection affecté par ton Foreach.
Tu vas devoir tester la présence de la VM (oopah) dans ton Vcenter.
Pour compléter ce que Matthew vient de répondre je vais rajouter ma petite pierre à l'édifice.
[code:1]
Get-Content D:\Sources\Scripts\delvm.txt | % {
if ( Get-VM $_ ) {
# VM Existe
Remove-VM $_ -confirm:$false
}
else {
# VM doesn't exist in inventory
}
}
[/code:1]
ça devrait faire le job.
Peut être qu'on peut trapper les erreurs en faisant un
Get-VM (Get-Content D:\Sources\Scripts\delvm.txt)
Mais je n'ai pas de vcenter sous la main pour tester ça
@+
Edit: Grillé et bien grillé par Matthew
<br><br>Message édité par: benduru, à: 17/04/13 22:07
C'esst ton if-else qui n'est pas bon à mon avis
[code:1]if ($vm -ne $null){[/code:1]
Ce code teste si $vù n'est pas null, ce qu'il ne sera jamais étant donné que $vm est un élément de la collection affecté par ton Foreach.
Tu vas devoir tester la présence de la VM (oopah) dans ton Vcenter.
Pour compléter ce que Matthew vient de répondre je vais rajouter ma petite pierre à l'édifice.
[code:1]
Get-Content D:\Sources\Scripts\delvm.txt | % {
if ( Get-VM $_ ) {
# VM Existe
Remove-VM $_ -confirm:$false
}
else {
# VM doesn't exist in inventory
}
}
[/code:1]
ça devrait faire le job.
Peut être qu'on peut trapper les erreurs en faisant un
Get-VM (Get-Content D:\Sources\Scripts\delvm.txt)
Mais je n'ai pas de vcenter sous la main pour tester ça
@+
Edit: Grillé et bien grillé par Matthew
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 12 ans 11 mois #14607
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Test VM existe ou non
Salut,
benduru écrit:
Oui, c'est la foire à la saucisse !

@ +
Matthew
benduru écrit:
Edit: Grillé et bien grillé par Matthew
<br><br>Message édité par: benduru, à: 17/04/13 22:07
Oui, c'est la foire à la saucisse !
@ +
Matthew
Connexion ou Créer un compte pour participer à la conversation.
- SiSMik
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 492
- Remerciements reçus 0
il y a 12 ans 11 mois #14611
par SiSMik
Réponse de SiSMik sur le sujet Re:Test VM existe ou non
C'est toi la saucisse
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
- Test VM existe ou non