Historically, if you needed to create a customized ESXi ISO that included additional ESXi drivers, your only supported option was to use the vSphere Image Builder service, which has a dependency on vCenter Server. If you have an existing vCenter Server, this was not a problem and you could easily create a customized ESXi ISO using either the vSphere UI (example here) or the CLI with PowerCLI (example here).
Where this becomes a real challenge is for a greenfield or brand new deployment, where the default ESXi ISO can not be used as it does not contain the required networking and/or storage drivers for the desired hardware platform. Although this affects some customers who use hardware from the VMware HCL but it definitely has a bigger impact on the VMware Homelab community or anyone just getting started for the very first time.
While discussing this topic with a colleague recently, I actually came to learn about an alternative solution for creating a customized ESXi ISO without the need of vCenter Server! Thanks to fellow team member Blair Fritz, who now works in the VMware Cloud Product Management team, for the awesome tip.
PowerCLI 12.0 was a major release with a TON of new functionality, but it it also included a couple of new cmdlets: New-IsoImage and New-PxeImage that allows users to create a custom ESXi ISO and Image without the need of vCenter Server. This was actually the first time I had heard about these cmdlets and I am guessing that this is probably going to be news for many of you as well.
The official VMware documentation does a pretty job explaining how the New-IsoImage cmdlet works, so I will not bore you with the details. One important thing to quickly mention is that these new cmdlets are included under the VMware.ImageBuilder module and unfortunately, that module has not been ported over to PowerCLI Core which also means you will need to use PowerShell on Windows to make use of these cmdlets. The other really cool thing about -Depot argument is that it can reference both a locally download ESXi Image Profile (zip) or it can actually point to VMware's Online repo located at https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml. Using this second option for the depot, I have found that it can take up to 30 seconds before it lists the version when using the Get-DepotBaseImages cmdlet to identify the version string that is required.
I know many folks in the community often create custom ESXi ISOs that include the popular USB Network Native Driver for ESXi, Community NVMe Driver for ESXi and Community Networking Driver for ESXi to name a few and I wanted to make it even easier for folks to get started.
Note: While testing the New-IsoImage cmdlet, I ran into an error when using the USB Network Native Driver for ESXi Fling and it looks like the driver was not created with specific metadata that the cmdlet is expecting. Hopefully we will be able to fix this in a future update of the Fling, but for now, you will need to use the Image Builder service if you need to incorporate USB Fling but for the Community Network and Storage Driver for ESXi, those work as expected.
To aide in this infrequent process, I have created a small PowerCLI script called create_custom_esxi_iso.ps1 which handles creating the required JSON software spec and the only thing users need to provide is the path to the ESXi Image Profile and a list of ESXi Offline Bundle Drivers paths. The script will check to ensure you are running PowerShell for Windows as PowerShell Core is NOT supported and also means you will need a Windows desktop to use this script.
Here is an example output of the script creating a new custom ESXi 7.0 Update 3c ISO that contains both the Community Network and Storage Driver for ESXi: