PoshCode Logo PowerShell Code Repository

Upgrade Templates to v7 (modification of post by view diff)
embed code: <script type="text/javascript" src="http://PoshCode.org/embed/1214"></script>download | new post

More info about this script can be found here: http://ict-freak.nl/2009/06/27/powercli-upgrading-vhardware-to-vsphere-part-1-templates/

www.ict-freak.nl

  1.  
  2. Function Convert-TemplateToVM($template){
  3.        
  4.         Write-Host "Converting" $vm -ForegroundColor Yellow            
  5.         Set-Template $template -ToVM -RunAsync | out-null
  6. }
  7.  
  8. Function PowerOn-VM($vm){
  9.  
  10.         Start-VM -VM $vm -Confirm:$false -RunAsync
  11.        
  12.                 do {
  13.                         $vmview = get-VM $vm | Get-View
  14.                         $status = $vmview.Guest.ToolsStatus
  15.        
  16.                                 Write-Host $vm is starting! -ForegroundColor Yellow
  17.                                 sleep 5
  18.        
  19.                 }until(($status -match "toolsOld") -or ($status -match "toolsOk"))
  20.                
  21.                 if ($status -match "Ok"){
  22.                         $Startup = "Ok"}
  23.                 elseif($status -match "toolsOld"){
  24.                         $Startup = "ToolsOld"}
  25.                 else{
  26.                         $Startup = "Not Ready"}
  27.                
  28.                 return $Startup
  29.  
  30. }
  31.  
  32. Function Check-ToolsStatus($vm){
  33.  
  34.         $vmview = get-VM $vm | Get-View
  35.         $status = $vmview.Guest.ToolsStatus
  36.  
  37.                 if ($status -match "toolsOld"){
  38.                         $vmTools = "Old"}
  39.                 elseif($status -match "toolsNotRunning"){
  40.                         $vmTools = "Not Running"}
  41.                 else{
  42.                         $vmTools = "Ok"}
  43.                 return $vmTools
  44. }
  45.  
  46. Function Check-VMHardwareVersion($vm){
  47.         $vmView = get-VM $vm | Get-View
  48.         $vmVersion = $vmView.Config.Version
  49.         $v4 = "vmx-04"
  50.         $v7 = "vmx-07"
  51.        
  52.                 if ($vmVersion -eq $v4){
  53.                         $vmHardware = "Old"}
  54.                 elseif($vmVersion -eq $v7){
  55.                         $vmHardware = "Ok"}            
  56.                 else{Write-Host "Error!!" -ForegroundColor Red
  57.                         $vmHardware = "Error"}
  58.                
  59.                 return $vmHardware
  60. }
  61.  
  62. Function PowerOff-VM($vm){
  63.                
  64.                 sleep 20
  65.                 Shutdown-VMGuest -VM $vm -Confirm:$false
  66.                                        
  67.                         do {
  68.                                 $vmview = Get-VM $vm | Get-View
  69.                                 $status = $vmview.Guest.ToolsStatus
  70.        
  71.                                         Write-Host $vm is stopping! -ForegroundColor Yellow
  72.                                         sleep 5
  73.        
  74.                         }until($status -match "toolsNotRunning")
  75.                         if ($status -match "toolsNotRunning"){
  76.                         $Shutdown = "Ok"}
  77.                         else{
  78.                         $Shutdown = "Not Ready"}
  79.                         return $Shutdown       
  80. }
  81.  
  82. Function ConvertTo-Template($vm){
  83.        
  84.         Write-Host "Converting" $vm -ForegroundColor Yellow
  85.         $vmview = Get-VM $vm | Get-View
  86.         $vmview.MarkAsTemplate() | Out-Null    
  87.  
  88. }
  89.  
  90. Function Upgrade-VMHardware($vm){
  91.  
  92.         $vmview = Get-VM $vm | Get-View
  93.         $vmVersion = $vmView.Config.Version
  94.         $v4 = "vmx-04"
  95.         $v7 = "vmx-07"
  96.  
  97.                 if ($vmVersion -eq $v4){
  98.                         Write-Host "Version 4 detected" -ForegroundColor Red
  99.                        
  100.                         # Update Hardware
  101.                         Write-Host "Upgrading Hardware on" $vm -ForegroundColor Yellow
  102.                         Get-View ($vmView.UpgradeVM_Task($v7)) | Out-Null
  103.         }      
  104. }
  105.  
  106. $vCenter = Read-Host "Enter your vCenter servername"
  107. Connect-VIServer $vCenter
  108.  
  109. $tmpfile = "$env:temp\tmpfile.csv"
  110. $templates = Get-Template -Name * | Export-Csv -NoTypeInformation $tmpfile
  111. $csv = Import-CSV $tmpfile
  112.  
  113.         foreach($item in $csv){
  114.                 $template = $item.Name
  115.                
  116.                         #Convert Template back to VM
  117.                         Convert-TemplateToVM $template
  118.         }
  119.        
  120.         foreach($item in $csv){
  121.                 $vm = $item.Name
  122.                 $vmHardware = Check-VMHardwareVersion $vm
  123.                
  124.                                
  125.                         if ($vmHardware -eq "Ok"){
  126.                                 Write-Host $vm "is up to date" -ForegroundColor Green
  127.                                 ConvertTo-Template $vm
  128.                         }
  129.                         else{Write-Host "Hardware is old" -ForegroundColor Red
  130.                                 if(PowerOn-VM $vm -eq "Ok"){
  131.                                         Write-Host "PowerOn Complete" -ForegroundColor Green
  132.                                         sleep 10
  133.                                         $vmToolsStatus = Check-ToolsStatus $vm
  134.                                        
  135.                                         if($vmToolsStatus -eq "Old"){
  136.                                                         Write-Host "The VMware Tools are old" -ForegroundColor Red
  137.                                                         Sleep 20
  138.                                                        
  139.                                                         Get-VMGuest $vm | Update-Tools
  140.                                                         Sleep 120
  141.                                                         Write-Host "VMware Tools are installed on:" $vm -ForegroundColor Cyan
  142.                                                                
  143.                                                                 $vmToolsStatus = Check-ToolsStatus $vm
  144.                                                        
  145.                                                                 if($vmToolsStatus -eq "Ok"){
  146.                                                                        
  147.                                                                         $PowerOffVM = PowerOff-VM $vm
  148.                                                                         if($PowerOffVM -eq "Ok"){
  149.                                                                                 Write-Host $vm "is down" -ForegroundColor Yellow
  150.                                                                                
  151.                                                                                 Upgrade-VMHardware $vm
  152.                                                                                 ConvertTo-Template $vm
  153.                                                                                 Write-Host $vm "is up to date" -ForegroundColor Green
  154.                                                                         }
  155.                                                                 }
  156.                                        
  157.                                         }
  158.                                         else{
  159.                                                 $PowerOffVM = PowerOff-VM $vm
  160.                                                 if($PowerOffVM -eq "Ok"){
  161.                                                         Upgrade-VMHardware $vm
  162.                                                         ConvertTo-Template $vm
  163.                                                         Write-Host $vm "is up to date" -ForegroundColor Green
  164.                                                 }      
  165.                                         }
  166.                                 }
  167.                         }
  168.         }
  169. Remove-Item $tmpfile -Confirm:$false
  170. Disconnect-VIServer -Confirm:$false

Submit a correction or amendment below (
click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:


Remember me