Try something like this
foreach($vm in Get-VM){
if($vm.ExtensionData.Guest){
if($vm.Guest.State -eq "running"){
if($vm.Guest.ExtensionData.ToolsStatus -eq "toolsOld"){
Update-Tools -VM $vm -NoReboot | Out-Null
while($vm.ExtensionData.Guest.ToolsStatus -eq "toolsOld"){
sleep 5
$vm.ExtensionData.UpdateViewData("Guest.ToolsStatus")
}
Shutdown-VMGuest -VM $vm
while($vm.ExtensionData.Runtime.PowerState -eq "poweredOn"){
sleep 5
$vm.ExtensionData.UpdateViewData("Runtime.PowerState")
}
if($vm.Version -ne "v10"){
Set-VM -VM $vm -Version v10 -Confirm:$false
}
Start-VM -VM $vm -Confirm:$false
}
else{
"$($vm.Name) Tools up to date"
if($vm.Version -ne "v10"){
Shutdown-VMGuest -VM $vm
while($vm.ExtensionData.Runtime.PowerState -eq "poweredOn"){
sleep 5
$vm.ExtensionData.UpdateViewData("Runtime.PowerState")
}
Set-VM -VM $vm -Version v10 -Confirm:$false
}
Start-VM -VM $vm -Confirm:$false
}
}
"$($vm.Name) appears to have no Tools installed"
}
}