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://blog.purplescreen.fr
#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
}