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 $_ } } } |
Categories: