PowerCLI de VMWare devient l’interface omniprésente pour les administrateurs de virtualisation d’hyperviseur sur du matériel compatible ESXi. Apprendre à gérer VMware via PowerShell et PowerCLI est un ajout important à votre boîte à outils. Dans ce tutoriel PowerCLI, vous allez apprendre comment le faire.
Dans ce tutoriel, vous apprendrez:
- les bases de la connexion à l’infrastructure VMware avec PowerCLI
- vous familiariser avec les cmdlets pour travailler avec les objets VMware
- vous donner les connaissances nécessaires pour explorer
- gérer VMware plus en détail via PowerCLI
Allons-y!
Ce dont vous avez besoin et ce que vous devez savoir
Avant d’aller trop loin dans ce tutoriel PowerCLI, il est toujours important de s’assurer que nous sommes tous les deux sur la même longueur d’onde. Pour cet article, je vais supposer que:
- Vous avez une expérience de base avec PowerShell. Vous n’avez pas besoin d’être un expert PowerShell, mais toute familiarité avec PowerShell vous sera utile.
- Vous disposez d’un hôte VMware ESXi ou d’un appliance vCenter pour vous connecter et tester
- Vous travaillez sur un poste de travail Windows (ou Mac / Linux)
- Vous avez déjà installé PowerCLI et êtes connecté. Sinon, consultez cet article d’installation de PowerCLI.
I’ll be using PowerCLI v 11.4.0. I will be working from a Windows 10 workstation with Windows PowerShell 5.1, but you’re welcome to use PowerShell 6 instead as there’s feature parity for this tutorial.
Rassembler des informations sur les hôtes ESXi avec PowerCLI
Avant de plonger dans la couche virtuelle de notre environnement vSphere, il est bon de passer en revue la couche matérielle physique. VMware PowerCLI fournit une cmdlet spécifiquement à cette fin, pour recueillir des informations détaillées appelées Get-VMHost
.
Lorsque vous êtes connecté à votre serveur vCenter ou à votre hôte ESXi, exécutez la cmdlet suivante.

Étant donné que je suis connecté à une vCenter Server Appliance qui gère deux hôtes ESXi distincts, je dispose de quelques informations de base sur les hôtes gérés. La commande Get-VMHost
vous permet de passer en revue les capacités matérielles de vos hôtes de virtualisation. Mais, par défaut, Get-VMHost
ne renvoie pas toutes les informations dont il dispose.
Si vous envoyez la cmdlet Get-VMHost
à Format-List
, vous obtiendrez une sortie console pour toutes les informations sur les hôtes donnés.

Get-VMHost | Format-List
Alternativement, vous pouvez être plus sélectif et ne sélectionner que des propriétés individuelles sur l’objet VMHost avec lequel vous travaillez, par exemple :
En exploitant cette sortie plus verbeuse, vous obtiendrez une vue encore plus détaillée du matériel sous-jacent qui exécute vos charges de travail virtualisées. Certaines des informations, en particulier, seraient :
- Informations de validation de la licence
- Total des processeurs/mémoire
- Modèle du fabricant du matériel
- Nom d’hôte DNS
Après avoir passé en revue ces informations, elles peuvent être compilées dans un fichier CSV, peut-être en utilisant la cmdlet Export-CSV
.
Inspection des machines virtuelles avec PowerCLI
Plongeons maintenant dans un autre sujet de ce tutoriel PowerCLI en examinant les hôtes virtuels et en vérifiant quelles machines virtuelles sont actuellement présentes sur un hôte ESXi donné.
La commande Get-VM
est une commande pratique que vous pouvez utiliser pour consulter les informations sur les machines virtuelles.
La sortie de cette commande ressemblera à quelque chose comme ci-dessous :

La sortie ci-dessus fournit une liste complète des états des machines virtuelles en cours d’exécution sur un hôte donné. Si vous ne spécifiez pas un hôte individuel, comme je l’ai fait ci-dessus, vous obtiendrez un tableau d’informations pour chaque hôte subséquent et les machines virtuelles sur chacun d’eux.
Si vous rencontrez un problème de dépannage et avez besoin de connaître le nombre de machines virtuelles sur un hôte donné ou si vous avez besoin d’utiliser VMware PowerCLI pour collecter des informations sur l’hôte ESXi, vous pouvez utiliser ces commandes à l’avenir. Les fonctionnalités de reporting que vous avez à portée de main commencent à s’étendre !
Inspection des commutateurs virtuels avec PowerCLI
Pour ceux d’entre nous chargés de configurer ou d’administrer les réseaux virtuels d’un cluster vCenter, il existe une gamme complète de commandes réseau pour tous les cas d’utilisation. Si vous souhaitez voir les commutateurs virtuels configurés dans votre environnement vSphere, vous utiliserez ce qui suit :
En fonction du nombre de réseaux virtuels et de commutateurs virtuels que vous avez, votre liste résultante peut être assez grande. Dans mon cas, comme vous pouvez le voir ci-dessous, j’ai un seul DSwitch qui est un commutateur virtuel distribué.
Dans une implémentation Enterprise vSphere où il y a de nombreux hôtes ESXi dans un cluster, les DSwitches simplifient le déploiement des commutateurs virtuels et des groupes de ports sur une multitude d’hôtes avec la même configuration. Cela permet d’économiser sur le travail manuel de création de configurations réseau identiques sur chaque hôte, et constitue un excellent moyen de faire évoluer votre cluster!

Trouver des VM attachées à un réseau virtuel avec PowerCLI
Lorsque vous essayez de réduire la portée d’un problème, vous pouvez vous demander quelles VM sont connectées à quel réseau. Pour le découvrir, vous pouvez utiliser la commande Get-VirtualPortGroup
. Apprenons-en davantage sur cette cmdlet dans ce tutoriel PowerCLI.
A port group is essentially a virtual network. To display all port groups, run Get-VirtualPortGroup
without any parameters. You should then see a listing of all virtual port groups present in your vSphere environment.

Pour trouver toutes les VM à l’intérieur de ce groupe de ports (DPortGroup dans mon cas), vous pouvez exécuter le script ci-dessous. Assurez-vous de remplacer la valeur DPortGroup par le nom de votre groupe de ports virtuel.
Dans cette ligne de commande, nous obtenons une liste de toutes les machines virtuelles qui existent dans cet appliance vCenter, puis nous filtrons avec la cmdlet Where-Object
pour obtenir uniquement les VM avec un nom de réseau correspondant à notre groupe de ports.

Avec cette sortie, vous serez en mesure de déterminer quelles machines sont connectées et configurées pour chaque réseau.
Lorsqu’on vous demande de localiser et d’analyser quelles VM sont connectées à un réseau particulier dans VMware, vous serez maintenant en mesure de fournir une solution de rapport PowerCLI à cette question.
Obtenir des informations sur la version du système d’exploitation de vos VM avec PowerCLI
La majeure partie du travail administratif au sein de VMware est effectuée au niveau de la machine virtuelle. Vous recevrez probablement d’innombrables demandes de tâches telles que la récupération d’une liste de toutes les tailles de disque dur sur les machines virtuelles ou l’obtention des versions du système d’exploitation invité pour tous vos serveurs, entre autres.
Ces tâches sont fastidieuses à grande échelle. PowerCLI peut les simplifier avec quelques cmdlets importantes à ajouter à votre arsenal, nous allons les aborder dans ce tutoriel PowerCLI.
Il se peut qu’on vous ait demandé à un moment donné : « Combien de serveurs Ubuntu avons-nous dans notre cluster VMware ? ». Vous avez peut-être alors passé beaucoup trop de temps à cliquer dans vCenter à la recherche d’une réponse. PowerCLI peut simplifier ce processus en examinant les objets VM dans vCenter et en appliquant une certaine magie PowerShell sur la sortie.
Jetez un œil au script suivant qui rassemble des informations sur les machines virtuelles. Cet extrait utilise la commande Get-View
, que nous verrons un peu plus tard, mais pour l’instant, sachez qu’il s’agit d’une méthode avancée pour récupérer les propriétés des objets VMware. Dans ce cas, nous recueillons des propriétés imbriquées qui sont plus facilement récupérées de cette manière.
Le code ci-dessus récupère une liste de machines virtuelles via la cmdlet PowerCLI Get-VM
, trie cette liste avec la cmdlet PowerShell Sort-Object
, puis récupère certaines des propriétés de l’objet à l’aide de la cmdlet PowerCLI Get-View
.
En l’exécutant dans mon environnement, j’obtiens le résultat ci-dessous. Vous pouvez voir le nom de la machine virtuelle dans vCenter, le Système d'exploitation configuré
qui correspond à la façon dont le matériel virtuel de VMware est configuré pour interpréter le système d’exploitation invité, et le Système d'exploitation en cours d'exécution
qui représente le système d’exploitation réel.

Avec les VM replicant et Scriptrunner éteintes dans le cluster, vous ne pourrez pas voir la valeur Running OS
pour elles. Le système d’exploitation est collecté par le service VMware Tools. S’il n’est pas disponible, PowerCLI ne peut pas extraire les informations sur le système d’exploitation.
Création de rapports CSV avec PowerCLI
VMware Tools est un service intégré pour les machines virtuelles Windows et Linux qui fournit des informations supplémentaires et des capacités administratives à l’hyperviseur. Le plus souvent, cela permet d’obtenir un arrêt propre, des informations sur le système d’exploitation et une visualisation de console de résolution supérieure des machines virtuelles.
A convenient way to report on and provide this information would be to pipe the above script into the Export-CSV
cmdlet. Export-Csv
will create a CSV file with the same information you see in the console.
Après avoir exécuté le code ci-dessus, vous devriez pouvoir ouvrir le fichier CSV avec Excel pour examiner le rapport.

Inspection des disques durs virtuels avec PowerCLI
La commande Get-Harddisk
est une autre commande utile à connaître. La cmdlet Get-HardDisk
vous permet d’inspecter les informations sur les disques durs virtuels attachés aux machines virtuelles.
Par exemple, pour interroger les informations sur le disque dur virtuel attaché à la machine virtuelle exchange1, vous pouvez exécuter la commande suivante :

Certaines de ces informations peuvent être redondantes, comme la capacité en Ko par rapport à Go. Mais il est utile de connaître le StorageFormat
(types de provisionnement mince/épais). Et de connaître le nom du fichier VMDK.
Par exemple, si vous rencontrez un problème courant et que tous les disques durs des machines virtuelles résident sur le même volume de stockage, cette connaissance peut accélérer le dépannage.
Inspection des adaptateurs de réseau virtuels avec PowerCLI
En plus de consulter les informations sur le disque dur de vos machines virtuelles, vous voudrez peut-être également vérifier les adaptateurs réseau virtuels. Pour vérifier ces propriétés pour une seule machine virtuelle, vous pouvez utiliser la cmdlet Get-NetworkAdpter
.
Alors que vous avez déjà cherché plus tôt dans ce port pour toutes les machines virtuelles résidant dans le même réseau, cette fois-ci vous voulez seulement voir les adaptateurs connectés à une machine virtuelle particulière.

Cela est utile si vous dépannez des machines virtuelles qui ont plusieurs adaptateurs réseau connectés. Vous pouvez rapidement et en un coup d’œil déterminer si ces adaptateurs sont connectés aux réseaux appropriés.
Exécution de scripts PowerShell dans les machines virtuelles avec Invoke-VMScript
Avec la cmdlet Invoke-VMScript
, vous pouvez également exécuter du code PowerShell directement à l’intérieur de la machine virtuelle ; aucune connectivité réseau nécessaire. Si vous avez déjà utilisé PowerShell Direct dans un environnement Hyper-V, cela sera une expérience similaire.
Au lieu de créer une session de connexion PowerShell ou d’utiliser la cmdlet Invoke-Command
via le réseau, la cmdlet Invoke-VMScript
peut envoyer des commandes directement à la machine virtuelle sans la connectivité WinRM ou SSH normale.
Par exemple, peut-être souhaitez-vous effectuer une simple liste de répertoire sur une machine virtuelle appelée exchange1. Pour ce faire, vous passeriez dir C:\
comme valeur pour le paramètre ScriptText
comme indiqué ci-dessous.
Les résultats sont comme si vous aviez exécuté les commandes directement depuis la console de la machine virtuelle. Invoke-VMScript
relaie ensuite toutes les sorties de la commande exécutée sur la machine virtuelle.

Ceci est un exemple basique, mais vous pouvez rendre les choses plus compliquées. Cette cmdlet PowerCLI vous permet de spécifier des types de scripts batch, PowerShell ou Bash dans le paramètre ScriptText
.
Vous pouvez également aller plus loin. Ci-dessous, vous pouvez voir comment utiliser Invoke-VMScript
pour exécuter du code PowerShell en utilisant une variable $script
distincte pour le paramètre ScriptText
. Cela nous permet de créer une entrée de script plus personnalisée pour la machine virtuelle à traiter.
La valeur du paramètre ScriptText
doit être une chaîne de caractères. C’est pourquoi la variable $script
utilise des guillemets simples extérieurs, c’est une nécessité.
Vous avez peut-être également remarqué l’utilisation du paramètre GuestCredential
. Ce paramètre est utilisé pour s’authentifier dans le système d’exploitation de la machine virtuelle. Ce paramètre est particulièrement utile si vous souhaitez exécuter le script sous un compte différent.
Votre script en action devrait donner un résultat similaire à celui ci-dessous.

Le résultat de ce script nous fournit les informations sur le disque de la machine virtuelle. Sur cette base, vous devriez savoir qu’il s’agit d’une machine virtuelle distante en raison du nom convivial VMware Virtual Disk
du lecteur.
Aller plus loin avec Get-View
Vous avez peut-être remarqué que certaines des cmdlets de base renvoient une propriété appelée ExtensionData
. Vous pouvez trouver cette propriété en envoyant de nombreuses cmdlets PowerCLI à la cmdlet PowerShell Get-Member
. Si vous vous demandiez ce que c’était, c’est maintenant votre chance de le découvrir.
La prochaine étape de cette aventure consiste à comprendre la cmdlet Get-View
. VMware PowerCLI utilise de nombreuses requêtes différentes vers la machine virtuelle pour fournir la sortie agréable et simple de Get-VM
. Mais il y a beaucoup de choses sous le capot qui ne sont accessibles qu’en utilisant la cmdlet Get-View
.
Vous verrez probablement beaucoup de scripts utilisant cette cmdlet. Il serait judicieux de passer du temps à vous habituer à voir cette cmdlet en action. Pour vous familiariser, utilisez la cmdlet Get-View
pour obtenir des informations sur une machine virtuelle (exchange1 dans cet exemple).
Vous pouvez voir que les options de Filter
de cette cmdlet nécessitent l’utilisation d’une table de hachage PowerShell et non de valeurs de chaîne individuelles. Soyez conscient lorsque vous construisez vos propres scripts uniques !
Le résultat de la commande ci-dessus est une grande quantité d’informations de configuration imbriquées et d’options de méthode pour prendre des mesures contre la machine virtuelle ou obtenir des propriétés d’objet.

Si vous utilisez le même script ci-dessus et envoyez la sortie à une variable, vous pouvez inspecter ces options imbriquées avec la notation par point. Ici, vous pouvez voir et récupérer toutes ces informations supplémentaires sur le système d’exploitation invité, que vous souhaiterez peut-être rapporter via PowerCLI.

Peut-être souhaitez-vous sélectionner une seule propriété. Si c’est le cas, vous pouvez exécuter ce qui suit pour réduire une valeur individuelle.
Il existe de nombreuses options Get-View
pour tous les types d’objets VMware. N’hésitez pas à explorer toutes ces options et à consulter cet article informatif de VMware qui détaille cette puissante commande !
VMware Code Capture – Apprenez de vos clics
Si vous souhaitez profiter de PowerCLI mais ne pas créer de code en le tapant, Code Capture dans vCenter est là pour vous. Code Capture est un nouvel outil de développement qui fonctionne de manière similaire au Centre d’administration Active Directory. Dans ce tutoriel PowerCLI, nous allons vous présenter Code Capture.
Cet outil enregistre toutes les actions que vous effectuez dans l’interface graphique. Il transforme ensuite toutes ces actions et vous fournit des scripts PowerCLI.
Par défaut, Code Capture n’est pas activé. Pour l’activer, ouvrez votre appliance vCenter et accédez à Menu -> Centre de développement comme indiqué ci-dessous.

Une fois sur l’onglet Centre de développement, activez l’option Activer Code Capture.

Lorsque vous activez Code Capture, vous verrez alors un bouton rouge Enregistrer dans l’en-tête de votre vCenter. Une fois activé, chaque fois que vous souhaitez enregistrer une action et la transformer en sortie PowerCLI, vous devez enregistrer l’activité de l’interface graphique en appuyant sur le bouton enregistrer.

Le bouton rouge enregistrer apparaîtra à côté de la section de votre utilisateur connecté dans vCenter, vous permettant d’enregistrer à tout moment.
Pour démontrer la capture de code, suivez l’assistant de création de la Nouvelle machine virtuelle.
- Cliquez sur le bouton Enregistrer pour commencer l’enregistrement. Cela fera clignoter le bouton rouge Enregistrer.
- Faites un clic droit sur votre hôte VMware et créez une nouvelle machine virtuelle. Suivez l’assistant qui s’affiche en créant une nouvelle machine virtuelle avec toutes les valeurs par défaut.
- Une fois la machine virtuelle créée, cliquez sur le bouton d’enregistrement pour arrêter votre enregistrement.
La sortie obtenue peut être légèrement plus verbeuse que prévu. La sortie inclut même toutes les actions de navigation dans l’interface graphique avant la création de la machine virtuelle. Mais vous devriez voir une section indiquée dans les commentaires commençant par CreateVM_Task
. C’est là que le code commence à créer une machine virtuelle.
Voici une partie de la sortie de CreateVM_Task du processus de la Création de la nouvelle machine virtuelle dans l’interface graphique via la capture de code :

Cette sortie peut être un peu intimidante, mais elle vous expose directement au nombre d’options de configuration disponibles pour vos machines virtuelles. En fonction de vos besoins, vous êtes maintenant en mesure d’apporter des ajustements dans vos propres scripts et de les personnaliser à votre guise.
L’utilitaire de capture de code n’est pas limité à la création de machines virtuelles. Il peut également générer du code pour des modifications de réseau, de petites modifications de machine virtuelle ou des modifications de configuration d’hôte. En étant capable de consulter la sortie PowerCLI des actions de l’interface graphique, vous pouvez gagner du temps dans votre parcours vers une infrastructure déployée en tant que code.
Résumé du tutoriel PowerCLI.
Dans cet article, vous avez couvert beaucoup de terrain. Bon travail! J’espère que vous avez réalisé la puissance que PowerCLI apporte à la gestion de l’infrastructure VMware.
Il y a beaucoup de cmdlets dans PowerCLI pour une large gamme de produits, mais nous n’en avons couvert que quelques-uns ici. Assurez-vous de rester à l’écoute de ce blog pour plus d’articles sur cet outil génial!