This script will help users/admins for deploying multiple VMs from one of available templates and unlike other scripts I saw so far which are file (answer file) based, this script is interactive and need and interaction of admin.
In next version I’d try to add some more options like “adding to resource pool or vApp”, adding custom description and …; for this script you can simply copy/paste it to new “.ps1″ file or download below file and for running this script you need to have “VMware vSphere PowerCLI” on your system.

Feel free to send your comment and idea and if you find any bug/problem in this script please let me know.

Download308 downloads
#####################################################
Write-Host "Name:`tDeploy Template Script
By:`tSohrab Kasraeian Fard (@Kasraeian)
Ver:`t0.1"
#####################################################

# Enabling multiple connection
$PCC = get-PowerCLIConfiguration
if ($test.DefaultVIServerMode -eq "single") {
	Set-PowerCLIConfiguration -DefaultVIServerMode Multiple
}

# vCenter Server Connection
Write-Host ""
$Target = Read-Host ("Which vCenter Do you want")
if ($global:DefaultVIServer.Name -eq $Target) {
	Write-Host "You already connected!"
	$CRMB = "Yes"
} else {
	$VICSI = Get-VICredentialStoreItem | Sort-Object Host
	$AI = "No"
	foreach ($item in $VICSI) {
		if ($Target -eq $item.Host) {
			$AI = "Yes"
		}
	}
	if ($AI -eq "No") {
		$cred = Get-Credential
		$NCR = Connect-VIServer -Server $Target -Credential $cred
	} else {
		$NCR = Connect-VIServer -Server $Target
	}
	if ($NCR.IsConnected -eq $true) {
		$CRMB = "Yes"
	} else {
		$CRMB = "No"
	}
}

function MainBody {
	# Template Selection
	Write-Host ""
	$Templates = Get-Template | Select Name | Sort-Object Name
	$i = 1
	$Templates | %{Write-Host $i":" $_.Name; $i++}
	$SIndex = Read-Host "Enter a number ( 1 -" $Templates.Count ")"
	$STemplate = $Templates[$SIndex - 1].Name
	Write-Host "You have selected" $STemplate

	# Customization Profile Selection
	Write-Host ""
	$OSCPs = Get-OSCustomizationSpec | Select Name | Sort-Object
	$j = 1
	$OSCPs | %{Write-Host $j":" $_.Name; $j++}
	Write-Host $j": None"
	$OSIndex = Read-Host "Enter a number ( 1 -" $OSCPs.Count ")"
	$SOSCP = $OSCPs[$OSIndex - 1].Name
	if ($OSIndex -eq $j) {
		Write-Host "You didn't select any OS Customization Profile"
		$SOSCP = "None"
	} else {
		Write-Host "You have selected" $SOSCP
	}

	# Host Selection
	Write-Host ""
	$VMHosts = Get-VMHost | Select Name | Sort-Object
	$x = 1
	$VMHosts | %{Write-Host $x":" $_.Name; $x++}
	$VMHIndex = Read-Host "Enter a number ( 1 -" $VMHosts.Count ")"
	$SVMHost = $VMHosts[$VMHIndex - 1].Name
	Write-Host "You have selected" $SVMHost

	# Datastore Selection
	write-Host ""
	$Datastores = Get-VMHost $SVMHost | Get-Datastore | Select Name,FreeSpaceGB,CapacityGB | Sort-Object CapacityGB
	$y = 1
	$Datastores | %{Write-Host $y":" $_.Name"`t`tCapacity (GB):" $_.CapacityGB"`t`tFree Space (GB):" $_.FreeSpaceGB; $y++}
	$DSIndex = Read-Host "Enter a number ( 1 -" $Datastores.count ")"
	$SDatastore = $Datastores[$DSIndex - 1].Name
	Write-Host "You have selected" $SDatastore

	# Name Selection
	Write-Host ""
	$SName = Read-Host "Please enter VMs Naming Patern"

	# Getting VM count
	Write-Host ""
	$NVMTD = Read-Host "How many VMs do you want to deploy"

	# Getting confirmation and deploying
	Write-Host "`nPlease confirm if you want to deploy $NVMTD by bellow settings
	Source Template: $STemplate
	Target Host: $SVMHost
	Target Datastore: $SDatastore
	OS Customization Profile: $SOSCP
	VM naming pattern: $SName"

	$NVMDConf = Read-Host "It's confirmed (Y/N)"
	if ($NVMDConf -eq "Y") {
		if ($SOSCP -eq "None") {
			$NVMs = 1..$NVMTD | foreach { New-VM -VMHost $SVMHost -Name $SName$_ -Template $STemplate -Datastore $SDatastore }
		} else {
			$NVMs = 1..$NVMTD | foreach { New-VM -VMHost $SVMHost -Name $SName$_ -Template $STemplate -Datastore $SDatastore -OSCustomizationSpec $SOSCP }
		}
		Write-Host "`n----- Created VMs -----"
		Get-VM | Where {$_.Name -like "$SName*"} | Select Name,NumCPU,MemoryMB | Format-Table -AutoSize
	} else {
		Write-Host "All process aborted by user!"
	}

	# Power On Option
	Write-Host ""
	$SPOO = Read-Host "Do you want to power on all created VMs (Y/N)"
	if ($SPOO -eq "Y") {
		$SVMs = Start-VM -VM $NVMs
		Write-Host "`n----- Powered On VMs -----"
		Get-VM | Where {$_.Name -like "$SName*"} | Select Name,NumCPU,MemoryMB,PowerState | Format-Table -AutoSize
	} else {
		Write-Host "You need to manually start your VMs."
	}
}

if ($CRMB -eq "Yes") {
	MainBody{}
} else {
	Write-Host "Error on connecting to vCenter Server"
}

Resources I’ve used so far for creation of this script:
1. Community answer from LUC Dekens@LUCD22 )
2. Comment from Alan Renouf@alanrenouf )