Adam l’automateur

PowerCLI de VMware devient l’interface omniprésente pour les administrateurs de virtualisation d’hyperviseurs du matériel pris en charge par ESXi. Apprendre à gérer VMware via PowerShell et PowerCLI est un ajout important à votre boîte à outils. Dans ce tutoriel PowerCLI, vous allez apprendre à faire exactement cela.

Dans ce tutoriel, vous apprendrez:

  • les bases de la connexion à l’infrastructure VMware avec PowerCLI
  • familiarisez-vous avec les applets de commande pour travailler avec des objets VMware
  • donnez-vous les connaissances nécessaires pour explorer
  • gérez davantage VMware via PowerCLI

Allons-y !

Table des matières

Ce que Vous devez avoir et savoir

Avant d’aller trop loin dans ce tutoriel PowerCLI, il est toujours important de s’assurer que vous et moi sommes tous les deux sur la même page. Pour cet article, je vais supposer que:

  • Vous avez une expérience PowerShell de base. Vous n’avez pas besoin d’être un expert PowerShell, en aucun cas, mais toute familiarité PowerShell que vous avez vous servira bien.
  • Vous disposez d’un hôte VMware ESXi ou d’une appliance vCenter pour vous connecter et tester
  • Vous travaillez sur un poste de travail Windows (Ou Mac/Linux)
  • Vous avez PowerCLI déjà installé et êtes connecté. Sinon, consultez cet article d’installation de PowerCLI.

J’utiliserai PowerCLI v 11.4.0. Je travaillerai à partir d’un poste de travail Windows 10 avec Windows PowerShell 5.1, mais vous pouvez utiliser PowerShell 6 à la place car il existe une parité de fonctionnalités pour ce tutoriel.

Rassemblez des informations sur les hôtes ESXi avec PowerCLI

Avant de vous plonger dans la couche virtuelle de notre environnement vSphere, il est conseillé de revoir la couche matérielle physique. VMware PowerCLI fournit directement une applet de commande à cet effet, pour collecter des informations détaillées appelées Get-VMHost.

Lorsque vous êtes connecté à votre hôte vCenter server ou ESXi, exécutez l’applet de commande suivante.

PS51> Get-VMHost
Get-VMHost
Get-VMHost

Étant donné que je suis connecté à une appliance vCenter Server qui gère deux hôtes ESXi distincts, on me fournit des informations de base sur les hôtes gérés. Le Get-VMHost vous permet d’examiner les capacités matérielles de vos hôtes de virtualisation. Mais, par défaut, Get-VMHost ne renvoie pas toutes les informations qu’il peut.

Si vous dirigez l’applet de commande Get-VMHost vers Format-List, vous obtiendrez une sortie de console pour toutes les informations sur les hôtes donnés.

Get-VMHost|Format-List
Get-VMHost | Format-List

Vous pouvez également être plus sélectif et sélectionner uniquement des propriétés individuelles sur l’objet VMHost avec lequel vous travaillez, comme:

PS51> Get-VMHost | format-list -Property State,LicenseKey,Version

Tirer parti de cette sortie plus détaillée fournira une vue encore plus grande du matériel sous-jacent exécutant vos charges de travail virtualisées. Certaines des informations, en particulier, seraient:

  • Informations de validation de licence
  • Totaux CPU / mémoire
  • Modèle du fournisseur de matériel
  • Nom d’hôte DNS

Après examen, cela peut être compilé dans un fichier CSV en utilisant peut-être l’applet de commande Export-CSV.

Inspecter les machines virtuelles avec PowerCLI

Plongeons maintenant dans un autre sujet de ce tutoriel PowerCLI en examinant les hôtes virtuels, c’est examiner 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 examiner les informations de la machine virtuelle.

PS51> Get-VMHost -Name <Host FQDN> | Get-VM

La sortie de cette applet de commande ressemblera à quelque chose comme ci-dessous:

PS51 Nom d'hôte Get-VMHost FQDN|Get-VM
PS51 > Nom d’hôte Get-VMHost|Get-VM

La sortie ci-dessus fournit une liste complète de l’état des machines virtuelles en cours d’exécution sur un hôte donné. Si vous choisissez de ne pas spécifier un hôte individuel, comme je l’ai fait ci-dessus, vous recevrez un tableau d’informations pour chaque hôte suivant et les machines virtuelles de chacun.

Si vous résolvez un problème et que vous 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 applets de commande à l’avenir. La fonctionnalité de reporting que vous avez à portée de main commence à se développer!

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 d’applets de commande 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 :

PS51> Get-VirtualSwitch

Selon le nombre de réseaux virtuels et de commutateurs virtuels dont vous disposez, votre liste résultante peut être assez grande. Dans mon cas, comme vous le voyez ci-dessous, j’ai un seul commutateur DSwitch qui est un commutateur virtuel distribué.

Dans une implémentation vSphere d’entreprise où il y a de nombreux hôtes ESXi dans un cluster, les commutateurs DSwitches simplifient le déploiement de commutateurs virtuels et de groupes de ports sur une multitude d’hôtes avec la même configuration. Cela permet d’économiser le travail manuel de création manuelle de configurations réseau identiques sur chaque hôte et constitue un excellent moyen de faire évoluer votre cluster!

Get-VirtualSwitch
Get-VirtualSwitch

Recherche de machines virtuelles Attachées à un Réseau virtuel avec PowerCLI

Tout en essayant de réduire la portée d’un problème, vous pouvez vous demander quelles machines virtuelles sont connectées à quels réseaux. Pour comprendre cela, vous pouvez utiliser la commande Get-VirtualPortGroup. Découvrons cette applet de commande dans ce tutoriel PowerCLI.

Un groupe de ports est essentiellement un réseau virtuel. Pour afficher tous les groupes de ports, exécutez Get-VirtualPortGroup sans aucun paramètre. Vous devriez alors voir une liste de tous les groupes de ports virtuels présents dans votre environnement vSphere.

Get-VirtualPortGroup
Get-VirtualPortGroup

Pour trouver toutes les machines virtuelles à 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 virtuels.

PS51> Get-VM | Where-Object { ($PSItem | Get-NetworkAdapter | where {$_.networkname -match "DPortgroup"})}

Dans ce one-liner, nous obtenons une liste de toutes les machines virtuelles qui existent dans cette appliance vCenter, puis filtrons avec l’applet de commande Where-Object pour obtenir uniquement les machines virtuelles dont le nom de réseau correspond à notre groupe de ports.

Obtenir des machines virtuelles avec uniquement un groupe de ports spécifique
Obtenir des machines virtuelles avec uniquement un groupe de ports spécifique

Avec cette sortie, vous pourrez définir quelles machines sont connectés et configurés pour chaque réseau.

Lorsqu’on vous demande de localiser et d’analyser les machines virtuelles connectées à un réseau particulier dans VMware, vous serez désormais autorisé à fournir une solution de reporting PowerCLI à cette question.

Obtenir des informations sur la version du système d’exploitation sur vos machines virtuelles avec PowerCLI

La majeure partie du travail administratif à l’intérieur de VMware est effectuée au niveau de la machine virtuelle. Vous êtes susceptible de recevoir d’innombrables demandes pour des 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 de versions de système d’exploitation invité pour tous vos serveurs, entre autres.

Ces tâches sont lourdes à grande échelle. PowerCLI est capable de les rationaliser avec quelques applets de commande importantes à ajouter à votre arsenal, alors couvrons-les dans ce tutoriel PowerCLI.

On vous a peut-être demandé à un moment donné : « Combien de serveurs Ubuntu avons-nous dans notre cluster VMware ?”. Vous avez peut-être ensuite passé beaucoup trop de temps à cliquer dans vCenter à la recherche d’une réponse. PowerCLI peut rationaliser ce processus en examinant les objets VM dans vCenter et en appliquant de la magie PowerShell à la sortie.

Jetez un coup d’œil au script suivant qui rassemble les informations de la machine virtuelle. Cet extrait utilise la commande Get-View dans laquelle nous allons entrer un peu plus tard mais pour l’instant, vous devez savoir que c’est un moyen avancé de récupérer les propriétés des objets VMware. Dans ce cas, nous recueillons les propriétés imbriquées les plus faciles à récupérer dans cette méthode.

PS51> Get-VM | Sort-Object -Property Name | Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") | Select-Object -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}}

Le code ci-dessus récupère une liste de machines virtuelles via l’applet de commande PowerCLI Get-VM, triant ladite liste avec l’applet de commande PowerShell Sort-Object, puis récupère certaines des propriétés de l’objet à l’aide du PowerCLI Get-View applet de commande.

L’exécution de ceci dans mon environnement donne le résultat ci-dessous. Vous pouvez voir le nom de la machine virtuelle dans vCenter, le Configured OS qui est la façon dont le matériel virtuel de VMware est configuré pour interpréter le système d’exploitation invité, et le Running OS réel qui représente le système d’exploitation réel.

Trouver des machines virtuelles sur la base de divers critères
Trouver des machines virtuelles sur la base de divers critères

Avec le réplicant des machines virtuelles et le script sont désactivés dans le cluster, vous ne pourrez pas voir la valeur Running OS pour eux. Le système d’exploitation est rassemblé par le service VMware Tools. S’il n’est pas disponible, PowerCLI ne peut pas extraire les informations du système d’exploitation.

Création de rapports CSV avec PowerCLI

VMware Tools est un service invité pour les machines virtuelles Windows et Linux qui fournit à l’hyperviseur des informations supplémentaires et des fonctionnalités d’administration. Le plus souvent, cela fournira des informations sur l’arrêt propre, le système d’exploitation et une visualisation plus haute résolution des machines virtuelles sur la console.

Un moyen pratique de signaler et de fournir ces informations serait de canaliser le script ci-dessus dans l’applet de commande Export-CSVExport-Csv va créer un fichier CSV avec les mêmes informations que celles que vous voyez dans la console.

PS51> Get-VM | Sort-Object -Property Name | Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") |Select -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}} | Export-CSV C:\report.csv -NoTypeInformation 

Après avoir exécuté le code ci-dessus, vous devriez pouvoir ouvrir le fichier CSV avec Excel pour examiner le rapport.

Fichier CSV d'informations sur la machine virtuelle
Fichier CSV d’informations sur la machine virtuelle

Inspection des Disques durs virtuels avec PowerCLI

La commande Get-Harddisk est une autre commande utile à connaître. L’applet de commande Get-HardDisk vous permet d’inspecter les informations sur les disques durs virtuels attachés aux machines virtuelles.

Par exemple, pour interroger des informations sur le disque dur virtuel attaché aux machines virtuelles exchange1, vous pouvez exécuter les opérations suivantes:

PS51> Get-VM -Name exchange1 | Get-HardDisk | Format-List
Interroger des informations sur le disque dur virtuel connecté à la machine virtuelle exchange1
Interroger des informations sur le disque dur virtuel connecté à la machine virtuelle exchange1

Certaines de ces informations peuvent être redondantes, telles que la capacité en Ko par rapport à GO. Mais il est utile de connaître le StorageFormat (types de provisionnement minces / épais). Et connaître le nom du fichier VMDK.

Par exemple, si vous rencontrez un problème courant et que tous les disques durs de VM résident sur le même volume de banque de données, cette connaissance peut accélérer le dépannage.

Inspection des cartes réseau virtuelles avec PowerCLI

En plus d’examiner les informations sur le disque dur de vos machines virtuelles, vous pouvez également vérifier les cartes réseau virtuelles. Pour vérifier ces propriétés pour une seule machine virtuelle, vous pouvez utiliser l’applet de commande Get-NetworkAdpter.

PS51> Get-NetworkAdapter -VM myVM

Alors que vous aviez chassé plus tôt dans ce port pour toutes les machines virtuelles résidant dans le même réseau, cette fois, vous ne voulez voir que les adaptateurs connectés à une machine virtuelle particulière.

Get-NetworkAdapter
Get-NetworkAdapter

Ceci est utile si vous dépannez des machines virtuelles sur lesquelles plusieurs cartes réseau sont connectées. Vous pouvez rapidement et en un coup d’œil déterminer si ces adaptateurs sont connectés aux réseaux appropriés.

En exécutant des scripts PowerShell dans des machines virtuelles avec Invoke-VMScript

En utilisant le Invoke-VMScript, vous pouvez également exécuter du code PowerShell directement à l’intérieur de la machine virtuelle ; aucune connectivité réseau n’est nécessaire. Si vous avez déjà utilisé PowerShell Direct dans un environnement Hyper-V, ce sera une expérience similaire.

Au lieu de créer une session à distance PowerShell ou d’utiliser l’applet de commande Invoke-Command sur le réseau, l’applet de commande Invoke-VMScript peut envoyer des commandes directement à la machine virtuelle sans connectivité WinRM ou SSH normale.

À titre d’exemple, vous souhaitez peut-être effectuer une simple liste de répertoires sur une machine virtuelle appelée exchange1. Pour ce faire, vous devez passer dir C:\ comme valeur du paramètre ScriptText comme indiqué ci-dessous.

PS51> Invoke-VMScript -VM exchange1 -ScriptText "dir C:\"

Les résultats sont comme si vous aviez exécuté les commandes depuis la console de la machine virtuelle elle-même. Invoke-VMScript relaie ensuite toutes les sorties que la commande exécutée sur la machine virtuelle renvoie.

Invoke-VMScript
Invoke-VMScript

Bien qu’il s’agisse d’un exemple de base, vous pouvez obtenir aussi compliqué que vous le souhaitez. Cette applet de commande PowerCLI vous permet de spécifier des types batch, PowerShell ou Bash dans le paramètre ScriptText.

Vous pouvez également être plus avancé. Ci-dessous, vous pouvez voir comment utiliser Invoke-VMScript pour exécuter du code PowerShell à l’aide d’une variable $script distincte pour l’entrée de paramètre ScriptText. Cela nous permet de créer une entrée de script plus personnalisée pour que la machine virtuelle puisse traiter.

PS51> $script = 'Get-Disk'$guestCredential = Get-CredentialInvoke-VMScript -ScriptText $script -VM VM -GuestCredential $guestCredential -ScriptType Powershell

La valeur du paramètre ScriptText doit être une chaîne. C’est pourquoi la variable $script a les guillemets simples comme 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 en tant que compte différent.

Votre script en action devrait entraîner une sortie similaire à celle ci-dessous.

Exécution d'un script sur une machine virtuelle avec Invoke-VMScript
Exécution d’un script sur une machine virtuelle avec Invoke-VMScript

Le résultat de ceci le script nous fournit les informations sur le disque de la machine virtuelle. Sur cette base, vous devez savoir que c’est une machine virtuelle distante en raison du VMware Virtual Disk comme nom convivial du lecteur.

Obtenir des avancées avec Get-View

Vous avez peut-être vu certaines des applets de commande de base renvoyer une propriété appelée ExtensionData. Vous pouvez trouver cette propriété en acheminant de nombreuses applets de commande PowerCLI vers l’applet de commande PowerShellGet-Member. Si vous vous demandiez ce que c’était, c’est maintenant votre chance de le savoir.

La prochaine étape de cette aventure consiste à comprendre l’applet de commande Get-View. VMware PowerCLI exploite de nombreuses requêtes différentes vers la machine virtuelle pour fournir la sortie jolie et simple de Get-VM. Mais il y a beaucoup de choses sous le capot qui ne sont accessibles qu’en utilisant l’applet de commande Get-View.

Vous verrez probablement beaucoup de scripts utilisant cette applet de commande. Il vous appartiendrait de passer du temps à vous habituer à voir cette applet de commande en action. Pour vous familiariser, utilisez l’applet de commande Get-View pour obtenir des informations sur la machine virtuelle (exchange1 dans cet exemple).

Vous pouvez voir que les options Filter de cette applet de commande nécessitent l’utilisation d’une table de hachage PowerShell et non de valeurs de chaîne individuelles. Soyez conscient lors de la construction de vos propres scripts uniques!

PS51> Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}

Le résultat de la commande ci-dessus est un grand nombre d’informations de configuration imbriquées et d’options de méthode pour effectuer des actions contre la machine virtuelle ou obtenir des propriétés d’objet.

Get-View
Get-View

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

PS51> $VM = Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}PS51> $VM.Guest
Utilisation de Get-View avec le paramètre de filtre
Utilisation de Get-View avec le paramètre de filtre

Vous souhaitez peut-être sélectionner une seule propriété. Si c’est le cas, vous pouvez exécuter ce qui suit pour affiner une valeur individuelle.

PS51> $VM.Guest.GuestFullName

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 va en profondeur sur cette puissante applet de commande !

Capture de code VMware – Apprenez de vos clics

Si vous souhaitez profiter de PowerCLI mais que vous préférez ne pas créer de code en tapant, la capture de code dans vCenter est faite pour vous. La capture de code est un nouvel outil de développement qui agit de la même manière que le centre administratif Active Directory. Couvrons la capture de code dans ce tutoriel PowerCLI.

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, la capture de code n’est pas activée. Pour l’activer, ouvrez votre appliance vCenter et accédez au menu – >Developer Center comme indiqué ci-dessous.

Navigation vers l'élément de menu du Centre de développement dans vSphere
Navigation vers l’élément de menu du Centre de développement dans vSphere

Une fois sur l’onglet du Centre de développement, basculez l’option Activer la capture de code.

Activation de la capture de code
Activation de la capture de code

Lorsque vous activez la capture de code, vous verrez alors un bouton d’enregistrement rouge dans l’en-tête de 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.

Indicateur de capture de code activé
Indicateur de capture de code activé

Le bouton d’enregistrement rouge apparaîtra à côté de votre section utilisateur connectée de vCenter afin que vous puissiez maintenant enregistrer à tout moment.

Pour démontrer la capture de code, passez par l’assistant de création de la nouvelle machine virtuelle.

  1. Cliquez sur le bouton Enregistrer pour commencer l’enregistrement. Cela provoquera la pulsation du bouton d’enregistrement rouge.
  2. Cliquez avec le bouton droit sur votre hôte VMware et créez une nouvelle machine virtuelle. Exécutez l’assistant résultant en créant une nouvelle machine virtuelle avec toutes les valeurs par défaut.
  3. Une fois la machine virtuelle créée, cliquez sur le bouton enregistrer et arrêtez votre enregistrement.

Le résultat peut être légèrement plus verbeux que prévu. La sortie inclut même toutes les actions de navigation sur l’interface graphique avant de créer 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 CreateVM_Task du nouveau processus de l’Assistant de machine virtuelle dans l’interface graphique via la capture de code :

Code généré par le centre de développement
Code généré par le centre de développement

Cette sortie peut être un peu écrasante, mais elle vous expose directement au nombre d’options de configuration disponibles pour vos machines virtuelles. En fonction de vos propres besoins, vous pouvez désormais ajuster vos propres scripts et les personnaliser à votre guise.

L’utilitaire de capture de code ne se limite pas à la création de machines virtuelles. Il peut également créer du code pour les modifications de mise en réseau, les petites modifications de machine virtuelle ou les modifications de configuration d’hôte. En pouvant examiner la sortie PowerCLI des actions de l’interface graphique, vous pouvez prendre un raccourci sur votre parcours vers l’infrastructure déployée en tant que code.

Résumé du tutoriel PowerCLI

Dans cet article, vous avez couvert beaucoup de terrain. Beau travail! J’espère que vous avez réalisé le pouvoir que PowerCLI apporte à la gestion de l’infrastructure VMware.

Il existe de nombreuses applets de commande dans PowerCLI pour une large gamme de bases de produits, mais nous n’en avons couvert que quelques-unes ici. Assurez-vous de rester à l’écoute de ce blog pour plus d’articles sur cet outil génial!

Pour en savoir plus

  • Comment télécharger et installer PowerCLI
  • Documents officiels VMware PowerCLI

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.