Files
Sandbox/VMware-VMToolsUpgradeAutoOnReboot.ps1
Zack Meier 03dba08135 sync
2026-04-15 15:42:41 -05:00

33 lines
1.6 KiB
PowerShell

# Get Tools Upgrade option
$AllVMs = Get-VM | Where-Object { $_.ExtensionData.summary.config.ManagedBy.Type -ne "placeholderVm" -and $_.ExtensionData.Guest.GuestId -like "windows*" }
$AllVMsWindows = $AllVMs | Where-Object {$_.Guest.OSFullName -like "*Windows*"}
$Result = [System.Collections.ArrayList]@()
Foreach($VM in $AllVMsWindows){
$obj=[PSCustomObject]@{
Name = $VM.Name;
ToolsVersion = $VM.ExtensionData.Config.Tools.ToolsVersion;
ToolsUpgradePolicy = $VM.ExtensionData.Config.Tools.ToolsUpgradePolicy
}
$null = $Result.Add($obj)
}
$Result
# set all Windows VMs to manual VMware Tools upgrade
$VMs = Get-VM | Where-Object { $_.ExtensionData.summary.config.ManagedBy.Type -ne "placeholderVm" -and $_.ExtensionData.Guest.GuestId -like "windows*"}
Foreach ($v in $VMs) {
$vm = $v | Get-View
$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$vmConfigSpec.Tools = New-Object VMware.Vim.ToolsConfigInfo
$vmConfigSpec.Tools.ToolsUpgradePolicy = "manual"
$vm.ReconfigVM($vmConfigSpec)
}
# set all VMs to upgradeAtPowerCycle VMware Tools
$VMs = Get-VM | Where-Object { $_.ExtensionData.summary.config.ManagedBy.Type -ne "placeholderVm" -and $_.ExtensionData.Guest.GuestId -like "windows*" -and $_.ExtensionData.config.tools.ToolsUpgradePolicy -ne "UpgradeAtPowerCycle"}
Foreach ($v in $VMs) {
$vm = $v | Get-View
$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$vmConfigSpec.Tools = New-Object VMware.Vim.ToolsConfigInfo
$vmConfigSpec.Tools.ToolsUpgradePolicy = "UpgradeAtPowerCycle"
$vm.ReconfigVM($vmConfigSpec)
}