Création de VMs en PowerCLI (Script)

Voici un script qui vous permet de créer autant de VM que vous le souhaitez. Vous aurez besoin d’un Template et d’un modèle “Customization Specification Manager”.

#Deployer des VMs en masse grace a un template and Customization Specification Manager
#Script By Olivier Gosselin - France
#http://www.purplescreen.eu
#Tools PowerCLI 6.5 Release 1

$vCenterFQDN = "VotrevCenter.FQDN"
$UservCenter = "Administrator"
$PasswordvCenter ="Password"
$GetDatastoreCluster = Get-DatastoreCluster
$GetDatastore = Get-Datastore
$GetVMHost = Get-VMHost | select -First 1
$ListTemplate = Get-Template
$OSSpec = Get-OSCustomizationSpec

Connect-VIServer $vCenterFQDN -User $UservCenter -Password $PasswordvCenter

cls
Write-Host "`r"
Write-Host "Pré-requis : `r"
Write-Host "=============`r"
Write-Host "- Il vous faudra un template sur votre infrastructure VMWare`r"
Write-Host "- Il vous faudra au minimum un modèle Customization Specification Manager`r"
Write-Host "`r"

#Ecrire le nom du préfix
Write-Host "`r"
 do {
$prefixNameVM = Read-Host "Ecrire le Préfixe que vous souhaitez pour vos VMs ? "
} while (!$prefixNameVM)

#Ecrire le nombre de VM
Write-Host "`r"
 do {
$NbVM= Read-Host "Nombre de VM souhaitez à partir de ce Template ? (Chiffre seulement) "
} while ((!$NbVM) -or ($NbVM -lt '1') -or ($NbVM -match '\D+'))

#Liste des Customization Specification Manager
Write-Host "`r"
$NbOSSpec = $OSSpec.count
 for ($i=0;$i -lt $NbOSSpec;$i++) {
 if ($NbOSSpec -eq 1) {
#Dans le cas ou nous avons un choix possible
Write-Host "Vous n'avez qu'un seul OS Spec : " $OSSpec.Name
$OSSpecName = $OSSpec.Name
}
 elseif ($NbOSSpec -gt 1) {
#Dans le cas ou nous avons plusieurs choix possible
Write-Host "`r Choisir votre Customization Specification Manager : `r"
 for ($i=0;$i -lt $NbOSSpec;$i++) {
Write-Host "$i-" $OSSpec.Name[$i] "`r"
}
 do {
$MaxWrite = $NbOSSpec-1
$IDOSSpec = Read-Host "Choisir votre OS personaliser ?[0-$MaxWrite] "
$OSSpecName = $OSSpec.Name[$IDOSSpec]
} while (($IDOSSpec -ge $NbOSSpec) -or (!$IDOSSpec) -or ($NbVM -match '\D+'))
}
}

#Liste des templates
Write-Host "`r"
$NbTemplate = $ListTemplate.count
 for ($i=0;$i -lt $NbTemplate;$i++) {
 if ($NbTemplate -eq 1) {
#Dans le cas ou nous avons un choix possible
Write-Host "Vous n'avez qu'un seul Template : " $ListTemplate.Name
$TemplateName = $ListTemplate.Name
}
 elseif ($NbTemplate -gt 1) {
#Dans le cas ou nous avons plusieurs choix possible
Write-Host "`r Liste des Templates : `r"
 for ($i=0;$i -lt $NbTemplate;$i++) {
Write-Host "$i-" $ListTemplate.Name[$i] "`r"
}
 do {
$MaxWrite = $NbTemplate-1
$IDTemplate = Read-Host "Choisir votre Template ?[0-$MaxWrite] "
$TemplateName = $ListTemplate.Name[$IDTemplate]
} while (($IDTemplate -ge $NbTemplate) -or (!$IDTemplate) -or ($NbVM -match '\D+'))
}
}

#Choisir le datastore
Write-Host "`r"
$NbDatastore = $GetDatastore.count
 for ($i=0;$i -lt $NbDatastore;$i++) {
 if ($NbDatastore -eq 1) {
#Dans le cas ou nous avons un choix possible
Write-Host "Vous n'avez qu'un seul Datastore : " $GetDatastore.Name
$DatastoreName = $GetDatastore.Name
}
 elseif ($NbDatastore -gt 1) {
#Dans le cas ou nous avons plusieurs choix possible
Write-Host "`r Liste des Datastores : `r"
 for ($i=0;$i -lt $NbDatastore;$i++) {
Write-Host "$i-" $GetDatastore.Name[$i] "`r"
}
 do {
$MaxWrite = $NbDatastore-1
$IDDatastore = Read-Host "Choisir votre Datastore ?[0-$MaxWrite] "
$DatastoreName = $GetDatastore.Name[$IDDatastore]
} while (($IDDatastore -ge $NbDatastore) -or (!$NbDatastore) -or ($NbVM -match '\D+'))
}
}

#Resumer
Write-Host "`r"
Write-Host "`rResumer : `r"
Write-Host "=========`r"
Write-Host "Nombre de VM(s) : "$NbVM "`r"
Write-Host "Prefixe de vos VM(s) : "$prefixNameVM "`r"
Write-Host "Customization Specification Manager : "$OSSpecName "`r"
Write-Host "Template : "$TemplateName "`r"
Write-Host "Datastore : "$DatastoreName "`r"
Write-Host "`r"
$Validate = Read-Host "Confirmer (y/n) ? "

#Creation des VMs
 if ($Validate -eq "y") {
for ($i=1;$i -le $NbVM;$i++) {
New-VM -Name $prefixNameVM"_"$i -Template $TemplateName -Datastore $DatastoreName -ResourcePool $GetVMHost -OSCustomizationSpec $OSSpecName
}
}
 else {
exit
}

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.