Skip to content

PowerCLI Script to verify Hardware ESXi 7.0 Support

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.)

12 thoughts on “PowerCLI Script to verify Hardware ESXi 7.0 Support”

  1. 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'.

        1. 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?

  2. 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.

      1. Thank you! I took a chance and removed that VIB file and everything is still working great. I will upgrade to 7.0 today. :)

  3. 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.

  4. 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+"*")
    }

    1. *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?

  5. 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. 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)

Leave a Reply

Your email address will not be published. Required fields are marked *