> Cloud > Automatiser vos déploiements Hyper-V avec PowerShell

Automatiser vos déploiements Hyper-V avec PowerShell

Cloud - Par Loïc Thobois - Publié le 27 juin 2014
email

Pour les administrateurs, les ingénieurs avant-vente, les développeurs, les formateurs et autres métiers techniques, l'un des avantages incontestables de la plateforme Hyper-V est la présence du moteur directement dans les systèmes Windows 8 et Windows 8.1.

Automatiser vos déploiements Hyper-V avec PowerShell

En effet, cela facilite la mise en place de POC (Proof of Concept) ou autres tests de qualification car la technologie est implémentée à l’identique de son grand frère sous Windows Server. On peut ainsi facilement monter des maquettes sur son ordinateur portable pour faire des démonstrations chez le client en minimisant les problèmes de compatibilité, liés à l’utilisation d’une version serveur de Windows comme poste de travail. Exception faite des composants de haute disponibilité et autres spécificités des infrastructures serveurs, on retrouve notamment des technologies comme PowerShell.

Le manque que l’on peut ressentir se situe aussi au niveau des outils de gestion des environnements virtuels comme System Center Virtual Machine Manager. Ces outils facilitent le déploiement des machines par l’intermédiaire de bibliothèques contenant des modèles préétablis ayant des configurations matérielles préconfigurées et des systèmes d’exploitation prêts à l’usage.

Dans cette situation, PowerShell se retrouve particulièrement utile pour automatiser le montage de plateformes et ainsi gagner du temps pour le déploiement des machines virtuelles associées. Je vous propose de voir aujourd’hui les bases d’un script de déploiement de machines pouvant vous faire gagner du temps et les outils qui l’accompagnent.

Introduction à PowerShell

PowerShell est un environnement d’exécution de script très puissant qui permet entre autres, d’automatiser des tâches dans un environnement Windows. Il se présente sous la forme d’un environnement en ligne de commande qui s’apparente fortement aux différents shells que l’on peut trouver dans le monde Unix/Linux. En reprenant une philosophie de base identique, il ajoute aux shells existant une rigueur dans la syntaxe des commandes et une orientation à destination des administrateurs plus marqués.

Le principe de PowerShell est d’utiliser de petites commandes simples appelées cmdlets que l’on va combiner à l’aide de pipe pour créer des fonctions complexes et complètes. L’objectif étant d’éviter au maximum l’utilisation de boucles et l’écriture d’algorithmes.

Les cmdlets utilisent toutes le même formatage avec un verbe qui va définir le type d’action à réaliser (New pour nouveau, Get pour lister, Set pour modifier, …) suivi du nom du type d’objets à manipuler (VM pour les machines virtuelles, Eventlog pour les journaux d’évènements, …).

Dans la mesure où il a été conçu pour être utilisé par des administrateurs, il s’articule autour d’un concept simple qui régit la plupart des tâches d’administration, à savoir :
• Lister les objets/éléments/composants voulus (ex : lister toutes les machines virtuelles d’un hyperviseur).

• Appliquer un filtre dessus (ex : ne garder que les machines virtuelles démarrées).
• Appliquer une opération dessus (ex : arrêter les machine virtuelles démarrées).

Dans ce contexte, Powershell est très efficace dans le traitement de masse et simple d’application car les trois opérations seront réalisées en une seule ligne, là où d’autres systèmes de scripting en demandent parfois des dizaines. PowerShell est un langage orienté objet. Lorsque l’on récupère une liste à la suite d’une commande, il ne s’agit pas d’une simple liste mais bien d’objets avec leurs propriétés et leurs méthodes en mémoire même si elles ne sont pas affichées.

Les commandes travaillant avec des objets typés, l’environnement PowerShell permet d’enchaîner les commandes à l’aide de pipelines tout en vérifiant la cohérence des informations qui sont passées.

Un pipeline permet à un ensemble de cmdlets d’échanger implicitement leurs paramètres. Les données qui parcourent le pipeline passent par chaque cmdlets. Pour créer un pipeline, le caractère « | » est utilisé. La sortie de chaque cmdlets est utilisée comme entrée de la cmdlets suivante si le type de donnée est compatible.

Le pipeline est sans doute le concept le plus intéressant de PowerShell. Correctement utilisé, il permet de simplifier la saisie de commandes complexes, mais également de simplifier la lecture du flux de données dans les commandes.

Voici un exemple étape par étape :

PS > Get-VM | Where Name -Like “AVAEDOS*” | Get-VMSnapshot
| Restore-VMSnapshot -Confirm:$false

• PowerShell récupère la liste des machines virtuelles de l’environnement.
• PowerShell garde uniquement les machines virtuelles dont le nom commence par AVAEDOS.
• PowerShell récupère le dernier snapshot de chaque machine virtuelle dont le nom commence par AVAEDOS.
• PowerShell applique le dernier snapshot de chaque machine virtuelle dont le nom commence par AVAEDOS.

De plus, PowerShell est devenu quasi incontournable dans les produits Microsoft actuels ce qui est d’autant plus motivant pour commencer à se former. Il sera ainsi à l’avenir facile de mettre en place dans un même script des interactions entre plusieurs produits (Hyper-V, Gestion des disques, Gestion réseau, SCVMM, …).

Il est aussi possible de créer ses propres cmdlets afin de rendre facilement scriptables des applications qui ne sont pas nativement ou officiellement prises en charge. Les bibliothèques de commandes peuvent être disponibles sous forme de SnapIn (composants enfichables) ou de Modules. On retrouve beaucoup de bibliothèques sur le site Codeplex – http://www.codeplex.com.

L’environnement PowerShell est capable d’exécuter des commandes classiques (ping, ipconfig, netsh, …), de dialoguer avec des scripts batch, vbs ou autres et d’utiliser nativement les assemblies .NET et les objets COM pour étendre ses capacités.
Ces différentes extensions permettent de bénéficier dans un même script de la richesse et de la simplicité des commandes natives PowerShell mais aussi de la puissance du Framework .NET et COM ainsi que de la compatibilité des scripts utilisant des technologies plus anciennes (Pour créer une interface graphique par exemple avec http:// showui.codeplex.com/). Dans les différents environnements d’édition, les commandes, les paramètres ainsi que certains attributs bénéficient de la complétion automatique à l’aide de la touche de tabulation et un historique est disponible par la touche F7.

Une interface graphique appelée PowerShell ISE (PowerShell Integrated Scripting Environment) permet la mise au point de scripts plus complexes en offrant des fonctions IntelliSense (Ctrl-Espace – menus contextuels de complétion en cours d’écriture), des Snipets par le raccourci Ctrl-J (structures de code toutes faites), un panneau contenant toutes les commandes disponibles intégrant un assistant d’écritures, et des fonctions de débogage (F9) et de pas à pas (F10, F11, Shift-F11).

Téléchargez cette ressource

Guide de Sécurité IA et IoT

Guide de Sécurité IA et IoT

Compte tenu de l'ampleur des changements que l'IA est susceptible d'entraîner, les organisations doivent élaborer une stratégie pour se préparer à adopter et à sécuriser l'IA. Découvrez dans ce Livre blanc Kaspersky quatre stratégies efficaces pour sécuriser l'IA et l'IoT.

Cloud - Par Loïc Thobois - Publié le 27 juin 2014