VMware Cloud Community
vmk2014
Expert
Expert
Jump to solution

Scheduling VM Compatibility Upgrade from Power Cli ?

Hi Everyone,

Can we Scheduling VM Compatibility Upgrade from Power Cli, instead of doing the change at each VM's level manually ?

pastedImage_0.png

pastedImage_1.png

Thanks

vmk

Tags (1)
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

Yes you can.

Try like this

$do = New-Object -TypeName VMware.Vim.VirtualMachineConfigSpec

$do.ScheduledHardwareUpgradeInfo = New-Object -TypeName VMware.Vim.ScheduledHardwareUpgradeInfo

$do.ScheduledHardwareUpgradeInfo.UpgradePolicy = [VMware.Vim.ScheduledHardwareUpgradeInfoHardwareUpgradePolicy]::onSoftPowerOff

$do.ScheduledHardwareUpgradeInfo.VersionKey = “vmx-13”

$do.Tools = New-Object VMware.Vim.ToolsConfigInfo

$do.Tools.ToolsUpgradePolicy = "UpgradeAtPowerCycle"

foreach($vmName in (Get-Content -Path C:\TEMP\vmliste.txt)){

    $vm = Get-VM -Name $vmName

    $vm.ExtensionData.ReconfigVM_Task($do)

}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

View solution in original post

40 Replies
LucD
Leadership
Leadership
Jump to solution

You can do something like this.

The names of the VMs are in a .txt file.
You will have to verify if vmx-13 is the HW version for your environment.

$do = New-Object -TypeName VMware.Vim.VirtualMachineConfigSpec

$do.ScheduledHardwareUpgradeInfo = New-Object -TypeName VMware.Vim.ScheduledHardwareUpgradeInfo

$do.ScheduledHardwareUpgradeInfo.UpgradePolicy = [VMware.Vim.ScheduledHardwareUpgradeInfoHardwareUpgradePolicy]::onSoftPowerOff

$do.ScheduledHardwareUpgradeInfo.VersionKey = “vmx-13”

foreach($vmName in (Get-Content -Path C:\TEMP\vmliste.txt)){

    $vm = Get-VM -Name $vmName

    $vm.ExtensionData.ReconfigVM_Task($do)

}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

vmk2014
Expert
Expert
Jump to solution

Thank you LucD,

I'm going to test now in test environment. Can we do similar for VMware tools also ? Enabling/scheduling the VMware tools upgrade next re-boot for a specific lists of VM's from VM's Lists ?

regards,

vmk

0 Kudos
LucD
Leadership
Leadership
Jump to solution

Yes you can.

Try like this

$do = New-Object -TypeName VMware.Vim.VirtualMachineConfigSpec

$do.ScheduledHardwareUpgradeInfo = New-Object -TypeName VMware.Vim.ScheduledHardwareUpgradeInfo

$do.ScheduledHardwareUpgradeInfo.UpgradePolicy = [VMware.Vim.ScheduledHardwareUpgradeInfoHardwareUpgradePolicy]::onSoftPowerOff

$do.ScheduledHardwareUpgradeInfo.VersionKey = “vmx-13”

$do.Tools = New-Object VMware.Vim.ToolsConfigInfo

$do.Tools.ToolsUpgradePolicy = "UpgradeAtPowerCycle"

foreach($vmName in (Get-Content -Path C:\TEMP\vmliste.txt)){

    $vm = Get-VM -Name $vmName

    $vm.ExtensionData.ReconfigVM_Task($do)

}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

vmk2014
Expert
Expert
Jump to solution

Will test this script too once i get the VM's having older version of VMware tools.

and update you.

Thank you

vmk

0 Kudos
vmk2014
Expert
Expert
Jump to solution

Does this script enable or schedule the both activity i.e. VMwaretools & VMware virtual Hardware compatibility  ?

0 Kudos
LucD
Leadership
Leadership
Jump to solution

The script configures the VM to update the HW version and upgrade the VMware Tools at the next restart.

The restart itself is something you will have to schedule.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
vmk2014
Expert
Expert
Jump to solution

Sound good !!  Does it mean it will require 2 re-boot  ?

Also, Can we check through Power Cli script after running the script that VMware tools upgrade schedule and VMware HW upgrade compatibility is scheduled or  option is enabled to  ensure that

100 % all the VM is scheduled for upgrade ? Want to ensure that it didn't misses since we are scheduling 1500 VM's

A kind of Check we want to run through script

regards,

vmk

0 Kudos
LucD
Leadership
Leadership
Jump to solution

If the VMware Tools upgrade requires a reboot, there will be 2.

You can check the settings with

Get-VM |

Select Name,

    @{N='HW Upgrade Scheduled';E={$_.ExtensionData.ScheduledHardwareUpgrade.UpgradePolicy -eq 'OnSoftPoweroff'}},

    @{N='Tools Upgrade Scheduled';E={$_.ExtensionData.Tools.ToolsUpgradePolicy -eq 'UpgradeAtPowerCycle'}}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
vmk2014
Expert
Expert
Jump to solution

Thank you LucD.

Sorry, i missed to say. Apologies. I need to check the bulk VM's from the lists ( C:\temp\liste.txt ) then how will be the script work for this. Not for single VM

0 Kudos
vmk2014
Expert
Expert
Jump to solution

LucD,

Since you told that it requires 2 re-boots which i have to controls.

The script configures the VM to update the HW version and upgrade the VMware Tools at the next restart.

The restart itself is something you will have to schedule.

Can we split the script in 2 parts like  below or Can we schedule the 2nd re-boot in the script after  Virtual HW version upgrade ?

Part 1 - VMware HW Upgrade

$do = New-Object -TypeName VMware.Vim.VirtualMachineConfigSpec

$do.ScheduledHardwareUpgradeInfo = New-Object -TypeName VMware.Vim.ScheduledHardwareUpgradeInfo

$do.ScheduledHardwareUpgradeInfo.UpgradePolicy = [VMware.Vim.ScheduledHardwareUpgradeInfoHardwareUpgradePolicy]::onSoftPowerOff

$do.ScheduledHardwareUpgradeInfo.VersionKey = “vmx-13”

foreach($vmName in (Get-Content -Path C:\TEMP\vmliste.txt)){

    $vm = Get-VM -Name $vmName

    $vm.ExtensionData.ReconfigVM_Task($do)

}

Part 2 VMware Tools upgrade

$do = New-Object -TypeName VMware.Vim.VirtualMachineConfigSpec

$do.Tools = New-Object VMware.Vim.ToolsConfigInfo

$do.Tools.ToolsUpgradePolicy = "UpgradeAtPowerCycle"

foreach($vmName in (Get-Content -Path C:\TEMP\vmliste.txt)){

    $vm = Get-VM -Name $vmName

    $vm.ExtensionData.ReconfigVM_Task($do)

}

0 Kudos
LucD
Leadership
Leadership
Jump to solution

The potential 2nd reboot will happen after the new VMware Tools version is installed.

And yes, you can split this i 2 parts.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
vmk2014
Expert
Expert
Jump to solution

Thank you. Hope i split in correct way Smiley Happy

0 Kudos
vmk2014
Expert
Expert
Jump to solution

Can we do the check from for lists of VM's ? Instead of Single VM's. Thank you for your help

0 Kudos
LucD
Leadership
Leadership
Jump to solution

You mean like this (see also your other thread)?

Get-VM -Name (Get-Content -Path C:\TEMP\vmliste.txt) |

Select Name,

    @{N='HW Upgrade Scheduled';E={$_.ExtensionData.ScheduledHardwareUpgrade.UpgradePolicy -eq'OnSoftPoweroff'}},

    @{N='Tools Upgrade Scheduled';E={$_.ExtensionData.Tools.ToolsUpgradePolicy -eq 'UpgradeAtPowerCycle'}}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
vmk2014
Expert
Expert
Jump to solution

Yes, Sir.

I 'm looking same for the lists of VM's  upgrade scheduled because want to ensure that no  VM misses for 100 % compliance.

Thanks

vmk

0 Kudos
vmk2014
Expert
Expert
Jump to solution

Ok the below command will pull the output in  CSV ? or only on screen ? want to save in CSV.

0 Kudos
vmk2014
Expert
Expert
Jump to solution

I think in this was way we can do. Please confirm

Get-VM -Name (Get-Content -Path C:\TEMP\vmliste.txt) |

Select Name,

    @{N='HW Upgrade Scheduled';E={$_.ExtensionData.ScheduledHardwareUpgrade.UpgradePolicy -eq'OnSoftPoweroff'}},

    @{N='Tools Upgrade Scheduled';E={$_.ExtensionData.Tools.ToolsUpgradePolicy -eq 'UpgradeAtPowerCycle'}}

| Export-Csv -Path C:\Temp\SchduledVM.csv -NoTypeInformation -UseCulture

thanks

vmk

0 Kudos
LucD
Leadership
Leadership
Jump to solution

Yes, that should work


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
vmk2014
Expert
Expert
Jump to solution

Output shows  like below. Does it mean I need to schedule?

   

NameHW Upgrade ScheduledTools Upgrade Scheduled
VM1FALSEFALSE
VM2FALSEFALSE
VM3FALSEFALSE
VM4FALSEFALSE
VM5FALSEFALSE
VM6FALSEFALSE

thanks

vmk

0 Kudos