The following script will upgrade all guest virtual machines from a lower version to the desired version:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# upgradevHardwareVersion.ps1
 
# User inputs
$desiredVersion='9.0'
$excludeKeywords=@(
  'lax',
  'aws'
)
$vmmServer=$env:computername
 
function updateVmVersion($vmNames,$desiredVersion='9.0',$vmmServer=$env:computername){
    $results=@()
    foreach($vmName in $vmNames){
        $version=.{           
            try{
                $vm=get-scvirtualmachine $vmName -vmmServer $vmmServer
                $previousVersion=$vm.Version
                if($vm.VirtualMachineState -eq 'Running' -and [version]$previousVersion -lt [version]$desiredVersion){
                    $null=stop-scvirtualmachine -vm $vm
                    $null=Update-SCVMVersion -vm $vm
                    $vm=start-scvirtualmachine -vm $vm
                    if($vm.status -eq 'Running'){
                        write-host "$vmName has been updated from version $previousVersion to $($vm.Version) and is now back online"
                    }else{
                        write-host "$vmName has been updated from version $previousVersion to $($vm.Version) but it's now offline"
                        return $previousVersion
                    }
                }elseif($vm.VirtualMachineState -eq 'PowerOff' -and [version]$previousVersion -lt [version]$desiredVersion){
                    $null=Update-SCVMVersion -vm $vm
                }
                return $vm.Version
            }catch{
                write-warning $_
                return $previousVersion
            }
        }
        $results+=@{$vmName=$version}
    }
    return $results
}
 
# Get the report
$vmsWithLowerVersions=get-scvirtualmachine|?{[version]$_.version -lt [version]$desiredVersion}
write-host "Processing list:`r`n$($vmsWithLowerVersions|select name,version|out-string)"
$filteredList=$vmsWithLowerVersions|?{$name=$_.Name;$null -eq $($excludeKeywords|?{$name -like "*$_*"})}
write-host "Filtered list:`r`n$($filteredList|select name,version|out-string)"
$inversedList=$vmsWithLowerVersions|?{$name=$_.Name;$null -ne $($excludeKeywords|?{$name -like "*$_*"})}
write-host "Inverted list:`r`n$($inversedList|select name,version|out-string)"
 
# Upgrade all VMs with lower versions
updateVmVersion $vmsWithLowerVersions.Name $desiredVersion $vmmServer

Upgrade a selected list of VMs

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$vmsToUpgrade=@"
eqwebmdadfs01
test
test1
"@
$vmmServer='lax-vmm01-kimconnect.com'
$desiredVersion='9.0'
 
function updateVmVersion($vmNames,$desiredVersion='9.0',$vmmServer=$env:computername){
    $results=@()
    foreach($vmName in $vmNames){
        $version=.{           
            try{
                $vm=get-scvirtualmachine $vmName -vmmServer $vmmServer
                $previousVersion=$vm.Version
                if($vm.VirtualMachineState -eq 'Running' -and [version]$previousVersion -lt [version]$desiredVersion){
                    $null=stop-scvirtualmachine -vm $vm
                    $null=Update-SCVMVersion -vm $vm
                    $vm=start-scvirtualmachine -vm $vm
                    if($vm.status -eq 'Running'){
                        write-host "$vmName has been updated from version $previousVersion to $($vm.Version) and is now back online"
                    }else{
                        write-host "$vmName has been updated from version $previousVersion to $($vm.Version) but it's now offline"
                        return $previousVersion
                    }
                }elseif($vm.VirtualMachineState -eq 'PowerOff' -and [version]$previousVersion -lt [version]$desiredVersion){
                    $null=Update-SCVMVersion -vm $vm
                }
                return $vm.Version
            }catch{
                write-warning $_
                return $previousVersion
            }
        }
        $results+=@{$vmName=$version}
    }
    return $results
}
 
$vmnames=@($vmsToUpgrade -split "`n")|%{$_.Trim()}
write-warning "Please confirm that we're ready to have these virtual machines rebooted:`r`n$vmnames"
pause
updateVmVersion $vmnames $desiredVersion $vmmServer

Simple version – upgrading only VMs that are offline

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
$vmsToUpgrade=@"
TEST
TEST1
"@
$vmmServer='lax-vmm01-kimconnect.com'
 
$vmnames=@($vmsToUpgrade -split "`n")|%{$_.Trim()}
foreach($vmName in $vmNames){
    $vm=get-scvirtualmachine $vmName -vmmServer $vmmServer
    if($vm.VirtualMachineState -eq 'PowerOff'){
        try{
            $oldVersion=$vm.Version
            $null=Update-SCVMVersion -vm $vm
            $newVersion=$vm.Version
            write-host "$vmName virtual hardward has been upgraded from version $oldVersion to $newVersion"
            pause
        }catch{
            write-warning $_
        }
 
    }
}