# 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) }