Écriture de scripts PowerCLI
Jetons un coup d’œil à quelques commandlets PowerCLI de base pour voir à quel point il est facile de commencer à extraire des informations de notre environnement vSphere avec PowerCLI. Gardez à l’esprit que ce qui suit n’est en aucun cas un tutoriel complet, mais plutôt une introduction à PowerCLI. Avec l’information dans cet article, vous pouvez commencer à écrire des commandlets et apprendre à automatiser votre environnement.
Le premier commandlet que nous devons exécuter est celui qui sert à se connecter à notre environnement vSphere. Vous pouvez vous connecter directement à un hôte ESXi ou à vCenter Server.
Pour vous connecter, exécutez la commande suivante dans une session PowerShell avec PowerCLI activé :
- connect-viserver -server 〈yourserver〉
Lorsque vous exécutez la commande, vous serez invité à saisir vos informations de connexion. Saisissez votre nom d’utilisateur et votre mot de passe pour votre serveur ESXi ou vCenter Server.
L’une des commandes les plus élémentaires que nous pouvons exécuter lorsque nous nous connectons à ESXi ou vCenter est la visualisation de toutes les machines virtuelles dans l’environnement. Nous utilisons le commandlet get-vm pour afficher des informations sur les machines virtuelles invitées.
- Get-VM – Le commandlet get-vm nous donne une liste les machines virtuelles qui fonctionnent sur l’hôte connecté.
Pour obtenir plus de détails sur le commandlet get-vm, nous pouvons afficher toutes les informations avec la commande :
- Get-VM | fl – Affiche des informations plus détaillées, telles que le système d’exploitation invité (guest OS), les listes de ressources partagées (Resource Pools), le matériel informatique et les versions, le dossier dans lequel le VM se trouve et de nombreux autres détails.
Maintenant, retournons des informations utiles spécifiques du commandlet get-VM. Trouvons les machines virtuelles qui sont dans un état inactif (powered off). Nous pouvons obtenir des informations à partir du commandlet Get-VM, puis les transférer au fonction where-object pour sélectionner les informations spécifiques que nous cherchons – dans ce cas, PowerState. Comme vous pouvez le constater, il existe de nombreuses possibilités d’obtenir diverses informations sur les machines virtuelles et de transférer ces informations dans des autres commandlets PowerShell.
- Get-VM | where-object {$_.PowerState –eq “PoweredOff”}
Comme vous pouvez le voir, cela affiche uniquement les machines virtuelles qui se trouvent dans l’état (PowerState) “PoweredOff”. Cela peut être extrêmement utile. Nous pouvons même diriger le résultat de la commande ci-dessus dans le commandlet Start-VM. Donc, essentiellement, nous pouvons obtenir toutes les machines virtuelles hors tension et aluminer ces machines virtuelles.
- Get-VM | where-object {$_.PowerState –eq “PoweredOff”} | Start-VM
Nous pouvons également fermer des machines virtuelles spécifiques. Nous pouvons appeler la VM par son nom, puis utiliser le commandlet Stop-VMGuest, qui déclenche un arrêt du système d’exploitation invité (guest OS).
- Get-VM 〈yourvm〉 | Stop-VMguest
Si vous ne souhaitez pas recevoir la confirmation de l’action, vous pouvez ajouter le paramètre -confirm:false :
Disons que nous voulons voir combien de machines virtuelles que nous avons en cours d’exécution avec plus d’une UC (unité centrale) assignée. Encore une fois, nous pouvons utiliser le commandlet where-object pour sélectionner l’objet NumCpu.
- Get-VM | where-object {$_.NumCpu -gt 1 }
Boucles PowerCLI
Les boucles vous permettent d’effectuer la même opération plusieurs fois – soit sur une liste des objets sélectionnés, soit un certain nombre de fois. Par exemple, avec une boucle foreach, nous pouvons boucler plusieurs fois une action donnée. Le pseudocode ci-dessous représente la configuration de la boucle :
foreach ($var in $vars) {
…fait quelque-chose…
}
Si nous voulons être précis avec les objets sur lesquels nous allons effectuer l’action, nous pouvons, par exemple, parcourir une liste spécifique de machines virtuelles à partir d’un fichier texte. Pour remplir le fichier texte, nous pouvons exécuter notre commandlet Get-VM, en sélectionnant les propriétés souhaitées, puis les transférer les données dans un fichier texte. Nous pouvons alors utiliser PowerShell pour lire le fichier texte et placer les machines virtuelles dans un tableau (array). Nous pouvons boucler à travers le tableau et effectuer une action. Nous ajoutons ci-dessous un nouvel adaptateur réseau aux machines virtuelles de la liste :
Get-vm | where-object {$_.MemoryGB –eq 4 } | select -ExpandProperty Name | out-file c:\VMs.txt
$vms = get-content c:\VMs.txt
Foreach-object ($vm in $vms) {
new-networkadapter -vm $vms -NetworkName “