L'objectif de ce script est de cloner une VM x fois
<#
. AUTEUR : Antoine JOVELIN
. FONCTION : Cloner une VM X fois
. UTILISATION :
- Lancer le script
#>
$StartTime = Get-Date
cls
# Declaration des fonctions
$herestring = @"
***** L'INSTALLATION A ECHOUEE *****
POUR INSTALLER POWERCLI :
1- RECUPERER LE MODULE DEPUIS CE LIEN : "https://developer.vmware.com/web/tool/vmware-powercli"
2- COPIER LE CONTENU DE L'ARCHIVE DANS "C:\Users\NOM_DU_USER\Documents\WindowsPowerShell\Modules"
3- RELANCER LE SCRIPT
"@
function verifPowerLI {
if($MyModules.name -match "VMware.PowerCLI"){
Write-Host "Le module PowerCLI est installé. Le script va continuer" -ForegroundColor Green
}else{
Write-Host "Le module PowerCLI n'est PAS installé. Le script ne pourra pas continuer" -ForegroundColor Yellow
do{
$reponse = Read-Host " Installer le module VMware.PowerCLI ? [oui/non] "
Switch ($reponse){
oui{
Install-Module -name vmware.powercli -Scope CurrentUser -Confirm:$false -Force
if($MyModules -notcontains "VMware.PowerCLI"){
Write-Host $herestring -ForegroundColor red
sleep 3
Write-Host " Fin du script dans quelques secondes" -ForegroundColor yellow
1..5 | Sort-Object -Descending | %{Start-Sleep -Seconds 1;Write-Host " $_ " -ForegroundColor yellow}
echo " "
exit
}
}
non{
Write-Host " Fin du script dans quelques secondes" -ForegroundColor yellow
1..5 | Sort-Object -Descending | %{Start-Sleep -Seconds 1;Write-Host " $_ " -ForegroundColor yellow}
echo " "
exit
}
}
}while(($reponse -ne "oui") -and ($reponse -ne "non"))
}
}
function vcenter-connect{
$VC = Read-Host -Prompt " Entrer le nom de vCenter "
$cred = Get-Credential
Write-Host;
Write-Host -ForegroundColor cyan "Connexion à vCenter. Merci de patienter..."
Connect-VIServer $VC -Credential $cred
Write-Host;
}
function vcenter-disconnect{
Write-Host;
Write-Host -ForegroundColor cyan "Déconnexion de vCenter..."
Disconnect-viserver -Server $Global:DefaultVIServer -Confirm:$false -Force
Write-Host;
}
# Debut du script
vcenter-connect
Write-Host;
Write-Host " Vérification des modules nécessaires " -ForegroundColor Cyan
1..3 | Sort-Object -Descending | %{Start-Sleep -Seconds 1}
$MyModules = Get-Module -ListAvailable | select name
Write-Host;
verifPowerLI
Write-Host;
Write-Host -fore yellow " ---- Cloner une VM ---- "
Write-Host;
$vm = Read-Host -prompt "Entrer le nom d'une VM a cloner"
Write-Host;
$vm_count = Read-Host -prompt "Entrer le nombre de Clones a creer "
Write-Host;
do{
$reponse = Read-Host -Prompt "Selectionner un Datastore automatiquement ? [oui/non] "
write-host;
if($reponse -eq "oui"){
1..$vm_count | foreach {
$y=”{0:D1}” -f + $_
$sufix = "-clone"
$cloneName= $vm + $sufix + $y
Write-Host -fore green " ---- Clone de la VM ${cloneName} ---- "
write-host;
$ds = get-vm -Name $vm | Get-Cluster | Get-Datastore | where{$_.ExtensionData.Summary.MultipleHostAccess} | Sort-Object -Property FreeSpaceGB -Descending | select -First 1
$esx = Get-Cluster -VM $vm | Get-VMHost | Get-Random
New-VM -VM $vm -Name $cloneName -Datastore $ds -VMHost $esx -RunAsync
Write-Host;
}
}elseif($reponse -eq "non"){
$ds = Read-Host -Prompt "Entrer le nom d'un Datastore"
write-host;
if(Get-Datastore $ds -ErrorAction Ignore){
1..$vm_count | foreach {
$y=”{0:D1}” -f + $_
$sufix = "-clone"
$cloneName= $vm + $sufix + $y
Write-Host -fore green " ---- Clone de la VM ${cloneName} ---- "
write-host;
$esx = Get-Cluster -VM $vm | Get-VMHost | Get-Random
New-VM -VM $vm -Name $cloneName -Datastore $ds -VMHost $esx -RunAsync
Write-Host;
}
}else{
Write-Host -fore red "Le datastore ${ds} n'existe pas"
}
}
}while(($reponse -ne "oui") -and ($reponse -ne "non"))
# Fin du script et deconnexion
Write-Host;
vcenter-disconnect
Write-Host -fore cyan " ---- Durée du Scipt ---- "
Write-Host;
$EndTime = Get-Date
$duration = [math]::Round((New-TimeSpan -Start $StartTime -End $EndTime).TotalMinutes,2)
Write-Host -fore green @"
Fin du Script
StartTime: $StartTime
EndTime: $EndTime
Duree : $duration minutes
"@
Write-Host -fore cyan " ---------------------- "