###################################### YOU CAN RUN THESE SCRIPTS MANUALLY OR RUN THE START UPDATE SECTION AS A SCHEDULED TASK AND THE FINISH SECTION AS A SEPARATE TASK. ###################################### ### START UPDATE OF VM TEMPLATE ### #Import the PowerCLI module Add-PSSnapin VMware.VimAutomation.Core #Host IP or vCenter Server IP/NAME $hostIP = '[vCenter Server]' #Connect to vCenter Connect-VIServer $hostIP #VM Templates to Update $VMTemplates = 'Win7ENTx64','WS2012StdR2' Foreach($vm in $VMTemplates){ #convert template to VM Get-Template -Name $vm | Set-Template -ToVM #Power on VM Start-VM -VM $vm } #Disconnect From vCenter Server Disconnect-VIServer $hostIP -Confirm:$false #################################### ### FINISH UPDATE OF VM TEMPLATE ### #Import the PowerCLI module Add-PSSnapin VMware.VimAutomation.Core #Host IP or vCenter Server IP/NAME $hostIP = '[vCenter Server]' #Connect to vCenter Connect-VIServer $hostIP #VM Templates to Update $VMTemplates = 'Win7ENTx64','WS2012StdR2' foreach($vm in $VMTemplates){ #check if VM is powered on $ison = Get-VM -Name $vm if($ison.PowerState -eq 'PoweredOn'){ #Shutdown VM Get-VM -Name $vm | Shutdown-VMGuest -Confirm:$false #Wait for shutdown to complete Start-Sleep -Seconds 300 #Convert VM back to a Template $tobeTemplate = Get-VM $vm | Get-View $tobeTemplate.MarkAsTemplate() } } #Disconnect From vCenter Server Disconnect-VIServer $hostIP -Confirm:$false