mardi 19 juillet 2011

PowerCLI : Découverte de l'administration PowerShell sous ESXi

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.Core
    PS> 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_DNS

    Il 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 Nancy

    Arrê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" -DeletePermanently

    L'idée maintenant, c'est de "piper" ces différentes commandes afin d'exécuter des tâches lourdes en quelques lignes.

    Quelques commandes cooool

    Déconnecter toutes les images ISO montées dans les VM :


    PS> Get-cddrive -VM * | Where {$_.ISOPATH -ne $null} | set-cddrive -nomedia

    Mettre en pause toutes les VM actives sur un cluster :

    PS> get-vm -location cluster_ou_serveur | where {$_.PowerState -eq "PoweredOn"} | suspend-vm

    Démarrer les VM en pause:

    PS> get-vm -location cluster_ou_serveur| where {$_.PowerState -eq "Suspended"} | Start-vm

    Dé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_2

    Migration 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.html

    Une référence FR sur PowerShell : http://www.powershell-scripting.com/

    Initiation PowerShell sur le MSDN : http://msdn.microsoft.com/fr-fr/visualc/bb906067

    Explication sur les profiles PowerShell : http://www.winmgr.com/?p=1645

    QuickStart 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.

    Aucun commentaire:

    Enregistrer un commentaire