Note du 05/05/2012 : Quelques corrections, modif de PowerShell V2 pour NT5.
Pour administrer ses serveurs ESX / ESXi, VMware fournit le client vSphere.
S'il est sympathique - et efficace - au premier abord, on se rends rapidement compte de ses limitations lorsque l'on commence à avoir beaucoup de machine virtuelle et que des tâches répétitives d'administration sont nécessaires.
Heureusement, pour palier à ce problème VMware fournit le client PowerCLI, qui permet d'administrer les serveurs et les machines virtuelles en exploitant la possibilités de PowerShell.
Je vais vous présenter PowerCLI en quelques mots et vous montrer comment gagner du temps en utilisant PowerCLI sur votre infrastructure de virtualisation.
Prérequis et Installation
Votre poste de travail doit posséder PowerShell, déjà présent en version 2 sur les NT6 (Vista,7, 2008 etc.), mais à installer sur les NT5 (XP, 2003 etc.).
Ensuite vous devez installer le client PowerCLI, disponible sur le site de VMware : http://www.vmware.com/support/developer/PowerCLI/index.html
Avant de lancer PowerCLI, vous devez autoriser PowerShell à exécuter des scripts non signés. Pour cela lancez une instance PowerShell et tapez :
Set-ExecutionPolicy RemoteSigned
Cette commande modifie le profil global de PowerShell (pour tous les utilisateurs PowerShell du poste de travail), son comportement sera alors le suivant :
- Les scripts exécutés localement peuvent être exécutés sans être signés
- Les scripts téléchargés à partir d’internet doivent être signés
- Ne demande pas de confirmation avant d’exécuter des scripts signés ou non par une autorité de certification connue de votre ordinateur
Lancement du client Vous pouvez lancer le client PowerCLI directement en cliquant sur son icône. Pour débuter ça reste pratique d'utiliser directement la console PowerCLI, mais le plus agréable reste d'utiliser l'ISE de PowerShell v2 et d'initialiser les modules PowerCLI avec les commandes suivantes :
PS> Add-PSSnapin VMware.VimAutomation.CorePS> Initialize-VIToolkitEnvironment.ps1 Ces lignes chargent le module VMware et initialisent son environnement d'administration : il est nécessaire de les taper pour pouvoir exploiter pleinement ses serveurs ESXi. Toutefois, vous pouvez créer un alias dans votre profil PowerShell (plus d'information sur les alias
ici ) ou, en intégrant directement ses commandes dans votre profil, les charger automatiquement.
Une fois votre console lancée en PowerCLI, vous devez maintenant vous connecter à un serveur ESX. Voici la commande de connexion :
PS> Connect-VIServer IP_ou_DNSIl est possible de fournir beaucoup plus d'informations :
PS> Connect-VIServer -Server IP_ou_DNS -Protocol https -User admin -Password pass Les informations manquantes seront demandées de manière interactive.
PowerCLI respecte bien l'architecture PowerShell, c'est à dire un format verbe-nom -commutateurs globaux (name, destination etc.).
Un simple
get-help vm vous sort toutes les commandes d'administration des machines virtuelles, les possibilités sont étourdissante.
Quelques commandes de base :Récupérer des infos sur une VM :
PS> Get-VM -Name "Vm-Name"Récupérer la liste des VM d'un centre :
PS> Get-VM -Location NancyArrêter brutalement une VM :
PS> Stop-VM -VM "VM-Name"Arrêter une VM contenant les VMWare Tools proprement :
PS> Shutdown-VMGuest -VM "VM-Name"Démarrer une VM :
PS> Start-VM -VM "VM-Name"Mettre en pause une VM :
PS> Suspend-VM -VM "VM-Name"Supprimer une VM de l'inventaire
PS> Remove-VM -VM "VM-Name"Redémarrer une VM contenant les VMWare Tools proprement :
PS> Restart-VMGuest -VM "VM-Name"Supprimer une VM de l'inventaire ET du datastore
PS> Remove-VM -VM "VM-Name" -DeletePermanentlyL'idée maintenant, c'est de "piper" ces différentes commandes afin d'exécuter des tâches lourdes en quelques lignes.
Quelques commandes coooolDéconnecter toutes les images ISO montées dans les VM :
PS> Get-cddrive -VM * | Where {$_.ISOPATH -ne $null} | set-cddrive -nomediaMettre en pause toutes les VM actives sur un cluster :
PS> get-vm -location cluster_ou_serveur | where {$_.PowerState -eq "PoweredOn"} | suspend-vmDémarrer les VM en pause:
PS> get-vm -location cluster_ou_serveur| where {$_.PowerState -eq "Suspended"} | Start-vmDéplacer l'ensemble des machines virtuelles d'un serveur à un autre :
PS> get-vm -location serveur_1 | move-vm -destination serveur_2 Pour déplacer toutes les VM allumées :
PS> get-vm -location serveur_1 | where {$_.PowerState -eq "PoweredOn"} | move-vm -destination serveur_2Migration de Datastore (d'un stockage à un autre) :
PS> get-vm -location cluster_ou_serveur | move-vm -Datastore nom_datastore Pour aller plus loin :Documentation et téléchargement PowerCLI :
http://www.vmware.com/support/developer/PowerCLI/index.htmlUne référence FR sur PowerShell :
http://www.powershell-scripting.com/Initiation PowerShell sur le MSDN :
http://msdn.microsoft.com/fr-fr/visualc/bb906067Explication sur les profiles PowerShell :
http://www.winmgr.com/?p=1645QuickStart pour PowerCLI 4.1.1 :
http://communities.vmware.com/servlet/JiveServlet/download/1696554-55551/Final-PowerCLI-4.1.1.pdf N'hésitez pas si vous avez des questions ou des commandes sympa à partager.
Je rajouterai mes prochaines découvertes dans un second billet.