VMware vSphere 7.0 is here and a lot of systems are no longer supported. Use the following script to verify that ESXi hosts in your environment are certified for running ESXi 7.0. The script generates the following output for all hosts connected to the vCenter.
Download: check_esxi_70_support.ps1 (GitHub Site)
The script automatically loads the HCL-Check function (from GitHub), and my JSON based VMware HCL. The script needs to download about 2 MB, which is the size of the HCL at the moment. Connect to a vCenter Server, modify the $scope variable if required (Default is to check all hosts connected to the vCenter) and run the script.
Please note that the script can only match about 80% of all systems that it has been tested against. If the Check-HCL function reports "supported=true" it is very likely that the system is supported, but to be 100% sure always verify with VMware HCL (Link is also included in Check-HCL for each system). If the output is "unknown" the common reason is that I couldn't match the system properly. If my script couldn't match, please report model strings as explained here.
If you get the following error message:
.\check_esxi_70_support.ps1 : File .\check_esxi_70_support.ps1 cannot be loaded. The file is not digitally signed. You cannot run this script on the current system. For more information about running scripts and setting execution policy, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
The script has been blocked by Windows for security reasons. You can unblock the file properties. (Whenever you unblock a script, verify it's content to make sure you understand what it does and that it does not do anything bad.)
Hello, thanks for sharing this script. I am getting an error when running this in PowerShell 7 and thought you'd want to know. Error is listed below and it appears to not affect the script running as I still gives me a result. It works without error in PowerShell 6.
OperationStopped: C:\Users\mike.pagan\AppData\Local\Temp\Check-HCL.ps1:31
Line |
31 | $hcl = $jsonserializer.DeserializeObject($hclJson)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Could not load type 'System.Web.UI.WebResourceAttribute' from assembly 'System.Web, Version=4.0.0.0,
| Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
Thank you. I'll take a look at that.
If you'd like me to test something drop me a line.
The reason why I used the JavaScriptSerializer was that ConvertFrom-Json had a limit of 2MB.
That was about 3 years ago. VMware removed old vSphere 4.x versions a couple of months ago pushing the size from 3.4 MB to 1.9 MB. Not sure if there was also a change to ConvertFrom-Json in that time because I can import a 4MB JSON File now.
I've removed the workaround from Check-HCL. Can you test the script again in PS6?
My home lab Dell Optiplex 3020 comes up with unknown. LOL. I put an Intel I350-T4 card in to replace the Realtek NIC since that isn't supported. When I installed my customized 6.7 image, I put in the sata-xahci driver too, but I don't think my system is using it since it say my storage is:
vmhba0
Model
Lynx Point AHCI Controller
Driver
vmw_ahci
in the GUI. Is there a way to verify that this vmw_ahci is a native driver that will work with 7.0? Don't want to upgrade if I can't get to my VMs.
You do not need the sata-xahci package since 6.5 at all.
To check if you are using any unsupported vmklinks drives, check this script: https://blogs.vmware.com/vsphere/2019/04/what-is-the-impact-of-the-vmklinux-driver-stack-deprecation.html
Also, you can always use --dry-run when upgrading with esxcli and it will tell you when there are unsupported drivers.
Thank you! I took a chance and removed that VIB file and everything is still working great. I will upgrade to 7.0 today. :)
I took a chance last night and uninstalled that VIB and my system is still running great. I will upgrade to 7.0 today! :) Thanks again.
Thanks for this!
I find if you change line 87 in check-hcl with the below code, you will match more Dell models (only tested on Dell, that's why the if condition).
This correctly identifies PowerEdge xD models.
if ($HostManuf -notlike "Dell*")
{
$ModelMatch = ("*"+$ModelMatch+"*")
}
*ModelMatch* should match everything (and more) than just ModelMatch. Can you give me an example where *ModelMatch* does not work with Dell Systems? Which Model String does not match?
Thank you for the script. 2 issues. I got this error when running it from a user that had never opened IE on the machine:
Invoke-WebRequest : The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-lau
nch configuration is not complete. Specify the UseBasicParsing parameter and try again.
At \Local\Temp\Check-HCL.ps1:26 char:21
+ ... iReleases = Invoke-WebRequest -Uri http://www.virten.net/repo/esxiRel ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotImplemented: (:) [Invoke-WebRequest], NotSupportedException
+ FullyQualifiedErrorId : WebCmdletIEDomNotSupportedException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
A suggested solution would be using: Invoke-WebRequest -Uri $url -UseBasicParsing
2. What rights does the user running the scripts have to have in vsphere to correctly run? I tried with read only and only got "unknown" for all my servers....
1. The PowerCLI Command "Invoke-WebRequest", which I am using, requires Internet Explorer to be configured. That is normal behavior. Just open it once.
2. "Read Only" is sufficient. Unknown means that the hardware could not be matched. What systems are you using? Can you run "Get-VMHost |select Manufacturer,Model,ProcessorType" and send the output? (There are no personal information in the output)