Introduction à vSphere PowerCLI

VMware fournit un ensemble de Cmdlets Powershell pour vCenter et vCloud Director regroupé au sein d’une application gratuite nommée « vSphere PowerCLI ».

Celle-ci est composée de six grand composants, les cinq premiers étant installés par défaut:

  • VMware.VimAutomation.Core: Administration de vSphere
  • VMware.VimAutomation.VDS: Gestion des switchs distribués (vSphere Distributed Switch)
  • VMware.VimAutomation.License: Gestion des licences
  • VMware.ImageBuilder: Gestion des images d’installation
  • VMware.DeployAutomation: Provisionnement des hôtes
  • VMware.VimAutomation.Cloud: Administration de vCloud Director

Installation de PowerCLI

Commençons par télécharger le (lourd) package d’installation à l’adresse suivante: my.vmware.com/group/vmware/get-download?downloadGroup=PCLI550R2. Un compte VMware est nécessaire.
A l’heure où j’écris, la dernière version est la 5.5 Release 2 Patch 1.

Si ce n’est déjà fait, l’assistant d’installation vous demandera d’installer plusieurs dépendances:
2014-09-09 10_15_04

Si l’alerte suivante apparait, exécutez dans une invite Powershell en mode administrateur Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine -Force:
2014-09-09 10_20_32

A l’issu de l’installation, on retrouve sur le bureau deux icônes VMware vSphere PowerCLI et VMware vSphere PowerCLI (32-Bit) – le second n’ayant aucun intérêt.

Première utilisation

Passons à une petite découverte de l’outil. Exécutez VMware vSphere PowerCLI:
2014-09-09 10_24_33

Ouvrez une connexion au vCenter à l’aide de la Cmdlet Connect-VIServer:

Connect-VIServer -Server ADRESSE_DU_VCENTER

Si les paramètres -Server et -Password ne sont pas précisés, une invite s’ouvre pour vous demander de saisir vos identifiants. Il est possible d’enregistrer les identifiants en ajoutant le paramètre -SaveCredentials.

Nous sommes à présent connecté:

2014-09-09 10_28_15

Débutons par lister le ou les différents clusters configurés sur notre vCenter à l’aide de Get-Cluster:

PowerCLI C:Program Files (x86)VMwareInfrastructurevSphere PowerCLI> Get-Cluster

Name                           HAEnabled  HAFailover DrsEnabled DrsAutomationLe
                                          Level                 vel
----                           ---------  ---------- ---------- ---------------
[Nom du cluster]                True       1          True       FullyAutomated

Par la suite, nous allons avoir besoin de passer en paramètre d’autres Cmdlets le cluster dans lequel chercher, il faut donc le placer dans une variable Powershell:

PowerCLI C:Program Files (x86)VMwareInfrastructurevSphere PowerCLI> $cluster = Get-Cluster -Name [Nom du cluster]

Ne reste plus qu’à lister l’ensemble de nos VM pour ce cluster:

PowerCLI C:Program Files (x86)VMwareInfrastructurevSphere PowerCLI> Get-VM -Location $cluster

Name                 PowerState Num CPUs MemoryGB
----                 ---------- -------- --------
[Insérer vos VMs ici :)]

Nous pouvons également lister les hôtes configurés dans le cluster:

PowerCLI C:Program Files (x86)VMwareInfrastructurevSphere PowerCLI> Get-VMHost -Location $cluster

Name                 ConnectionState PowerState NumCpu CpuUsageMhz CpuTotalMhz
----                 --------------- ---------- ------ ----------- -----------
[Insérer vos hôtes ici]

 Écriture d’un premier script

L’intérêt de PowerCLI réside bien sûr et surtout dans la possibilité d’écrire des scripts avec Powershell.

Imaginons que nous souhaitons connaître les VLAN pour l’ensemble de nos réseaux, nous allons donc utiliser le Cmdlet Get-VirtualPortGroup qui va nous retourner un grand nombre de colonnes:

PowerCLI C:Program Files (x86)VMwareInfrastructurevSphere PowerCLI> Get-VirtualPortGroup | Get-Member

   TypeName :
VMware.VimAutomation.ViCore.Impl.V1.Host.Networking.VirtualPortGroupImpl

Name                 MemberType Definition
----                 ---------- ----------
AttachNetworkAdapter Method     VMware.VimAutomation.ViCore.Interop.V1.Task....
ConvertToVersion     Method     T ConvertToVersion[T](), T VersionedObjectIn...
Equals               Method     bool Equals(System.Object obj)
GetHashCode          Method     int GetHashCode()
GetType              Method     type GetType()
IsConvertableTo      Method     bool IsConvertableTo(type toType), bool Vers...
LockUpdates          Method     void ExtensionData.LockUpdates()
ToNetworkAdapter     Method     System.Collections.Generic.IEnumerable[VMwar...
ToString             Method     string ToString()
ToVirtualMachine     Method     System.Collections.Generic.IEnumerable[VMwar...
ToVirtualSwitch      Method     System.Collections.Generic.IEnumerable[VMwar...
UnlockUpdates        Method     void ExtensionData.UnlockUpdates()
Client               Property   VMware.VimAutomation.ViCore.Interop.V1.VIAut...
ExtensionData        Property   System.Object ExtensionData {get;}
Key                  Property   string Key {get;}
Name                 Property   string Name {get;}
Port                 Property   VMware.VimAutomation.ViCore.Types.V1.Host.Ne...
Uid                  Property   string Uid {get;}
VirtualSwitch        Property   VMware.VimAutomation.ViCore.Types.V1.Host.Ne...
VirtualSwitchId      Property   string VirtualSwitchId {get;}
VirtualSwitchName    Property   string VirtualSwitchName {get;}
VirtualSwitchUid     Property   string VirtualSwitchUid {get;}
VLanId               Property   int VLanId {get;}
VMHostId             Property   string VMHostId {get;}
VMHostUid            Property   string VMHostUid {get;}

Dans notre cas, nous n’avons besoin de ne récupérer que le nom et le VLAN:

PowerCLI C:Program Files (x86)VMwareInfrastructurevSphere PowerCLI> Get-VirtualPortGroup | select Name,VlanId

Name                 VLanId
----                 ------
[Insérer vos VLan ici]

Problème: il peut y avoir des doublons, il faut donc rajouter le paramètre -Uniq à select:

PowerCLI C:Program Files (x86)VMwareInfrastructurevSphere PowerCLI> Get-VirtualPortGroup | select -Uniq Name,VlanId

Classons le tout par VlanId puis Nom:

PowerCLI C:Program Files (x86)VMwareInfrastructurevSphere PowerCLI> Get-VirtualPortGroup | select -Uniq Name,VlanId | sort VlanId,Name

A présent, essayons de récupérer toutes les VM associées pour chaque VLAN. Nous allons avoir besoin pour cela de passer à Get-VM le virtual switch en paramètre. Il faut donc récupérer ce champ et mettre le résultat dans une variable:

PowerCLI C:Program Files (x86)VMwareInfrastructurevSphere PowerCLI> $vlans = (Get-VirtualPortGroup | select -Uniq Name,VlanId,VirtualSwitch | sort VlanId,Name)

A présent, mettons tout en forme en itérant sur la liste des VLans:

$vlans = (Get-VirtualPortGroup | select -Uniq Name,VlanId,VirtualSwitch | sort VlanId,Name)
$separator = New-Object System.String -ArgumentList @("=", (Get-Host).UI.RawUI.BufferSize.Width)

foreach ($vlan in $vlans)
{
    $vms = (Get-VM -VirtualSwitch $vlan.VirtualSwitch | select Name,PowerState,Guest | sort Name,PowerState)
    if ($vms.Count -eq 0) { continue }
    Write-Host $separator
    Write-Host $vlan.Name, " ", $vlan.VlanId
    $vms | Format-Table Name,PowerState,@{Label="IPAddress";Expression={$_.Guest.IPAddress}}
    Write-Host
}

Résultat:

===============================================================================================================================================================================================

LAN_120   120

Name                                                                                                                 PowerState IPAddress                                                     
----                                                                                                                 ---------- ---------                                                     
[Nom de la VM]                                                                                                       PoweredOn {XXX.XXX.XXX.XXX, XXX.XXX.XXX.XXX}                          
[Nom de la VM]                                                                                                       PoweredOn {XXX.XXX.XXX.XXX, XXX.XXX.XXX.XXX}

===============================================================================================================================================================================================

TEST_ILLICO   1664

Name                                                                                                                 PowerState IPAddress                                                     
----                                                                                                                 ---------- ---------                                                     
[Nom de la VM]                                                                                                       PoweredOn {XXX.XXX.XXX.XXX, XXX.XXX.XXX.XXX}                          
[Nom de la VM]                                                                                                       PoweredOn {XXX.XXX.XXX.XXX, XXX.XXX.XXX.XXX}

1 réflexion sur « Introduction à vSphere PowerCLI »

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s