Set-UpdateToolsPolicy–For your VM’s
In continuation to William Lam’s post on how you can Automating VMware Tools Upgrade Policy and thanks to a comment left on the post – I wanted to perform the same functionality in PowerCLI.
I present to you the Set-UpdateToolsPolicy Function
Function Set-UpdateToolsPolicy {
<#
.SYNOPSIS
A function to change the update policy one or more VM's
.DESCRIPTION
This script will change the VMware Tools Update policy
on one or many virtual machines
.PARAMETER VM
The name of one or more virtual machines, this can be
passed from the pipeline
.PARAMETER Policy
The policy setting - has to be be either manual (do not try
and upgrade tools on each boot cycle) or upgradeAtPowerCycle
(tools will be checked for upgrade at each power cycle)
.EXAMPLE
PS C:\> Get-VM foo | Set-UpdateToolsPolicy -Policy manual
.EXAMPLE
PS C:\> Set-UpdateToolsPolicy -VM foo -Policy upgradeAtPowerCycle
.NOTES
Author: Maish Saidel-Keesing
.LINK
https://blog.technodrone.cloud/2012/03/set-updatetoolspolicyfor-your-vms.html
#>
[CmdletBinding()]
Param(
[Parameter(Position=0,Mandatory=$True,ValueFromPipeline=$True)]
[String]
$VM,
[ValidateSet("manual","upgradeAtPowerCycle")]
[String]
$Policy
)
begin {
$config = New-Object VMware.Vim.VirtualMachineConfigSpec
$config.Tools = New-Object VMware.Vim.ToolsConfigInfo
$config.Tools.ToolsUpgradePolicy = $Policy
}
Process
{
foreach ($vmobject in (Get-VM $VM)) {
$vmobject.ExtensionData.ReconfigVM($config)
}
}
}
Line 31: Using [ValidateSet(“manual”,“upgradeAtPowerCycle”)] as part of the definition of the parameter means that is can only be one of these two options – this is much easier than doing a switch on the variable.
Line 36-40: This part is the same for all of the VM’s that will be processed – that is why it is part of the processed at the beginning of the script.
I would also like to thank Damian Karlson for his post on this subject which was helpful.
The reason why I wrote this small function .. - well that is for another post.
As usual your comments are always welcome.