Posted On November 30, 2022

Upgrade Virtual Hardware Version in VMM

kimconnect 0 comments
blog.KimConnect.com >> Codes , Virtualization >> Upgrade Virtual Hardware Version in VMM

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

# 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

$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

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

    }
}

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post

PowerShell: How To Invoke Rest Method with RingCentral Rest API

[string]$restApiTokenUrl="https://platform.ringcentral.com/restapi/oauth/token" [string]$restApiUrl="https://platform.ringcentral.com/restapi/v1.0/account/~/extension?page=1" [string]$username='15555555555' [string]$password='PASSWORDHERE' [string]$extension='100' [string]$appKey='APPKEYHERE' # Part 1: Obtain Rest-API Token / Authorization function…

Installing VMWare tools

Install software needed by VMware Tools Note: you need to boot the 1-1 kernel from…

PowerShell: File Copying Operation

2/11/20 Update: Version 0.1.8 is available here: https://blog.kimconnect.com/powershell-file-copy-script-using-emcopy-vss-legacy/ Version 0.1.6 <#.Description File_Copy_Script Version: 0.16Purpose: this…