玩VMware ESXi的人,十个里有八个都卡过这么一关:官方ISO下载好了,U盘做好了,启动安装也都顺利,偏偏一进到选择存储或者准备开Web管理页面的时候,发现自己的网卡根本不被系统识别,只能盯着屏幕发愣。这事情在DIY主机、软路由、老服务器上尤其常见,我自己就帮朋友处理过好几台螃蟹网卡认不出来的机器。ESXi-Customizer-PS就是专门解决这个问题的工具,它是ESXi-Customizer的PowerShell脚本版,核心用途是把第三方驱动注入到ESXi离线包中,重新生成一个带驱动的自定义ISO,再用这个ISO去安装ESXi。如果你手头是Realtek网卡、板载螃蟹卡、部分USB转网卡这类官方镜像里不带驱动的硬件,这篇文章可以直接当作一套完整操作手册来用。
这套方法我从ESXi 6.x用到7.x,一直觉得很稳。下面不绕弯子,直接从"为什么需要它"开始,逐步讲到原理、环境准备、完整实操和故障排查。整个过程不算复杂,一台Windows电脑加上几样素材就能搞定,但要真正跑通,有几个细节必须留意。
1. 这工具解决什么问题:装完ESXi不认网卡的根源
1.1 VMware官方镜像的驱动范围有限
很多人第一次接触ESXi,是从官网下了一个标准ISO开始。这个ISO里包含了VMware Hypervisor本体和一批经过认证的驱动,覆盖常见服务器厂商的硬件。但问题恰恰出在"覆盖范围"上——VMware做兼容性测试的硬件池主要是戴尔、惠普、联想、超微这些服务器品牌,大批消费级主板、软路由网卡、家用NAS板载网卡并不在测试清单里。
ESXi系统启动后要靠vmkernel里的网卡驱动去识别物理网卡,如果镜像里没有对应驱动,网卡就不会出现在网络管理界面里。更尴尬的是,ESXi和普通Linux发行版不一样,你不能随便进系统敲几条命令装个驱动包,它是一个封闭的Hypervisor系统,驱动需要在镜像层面提前集成好。这就是为什么我们需要ESXi-Customizer-PS去"开小灶"。
另外要理解,ESXi的驱动以VIB格式存在。VIB(vSphere Installation Bundle)相当于ESXi世界的驱动安装包,里面包含了驱动二进制文件和对应的元数据。官方ISO只内置经过认证的VIB,第三方VIB想要进入系统,要么在构建镜像时注入,要么在已安装的ESXi里用esxcli命令安装。
1.2 ESXi-Customizer-PS 和它的前辈们
老玩家可能听过ESXi-Customizer,那个是图形界面工具,早期很多人用它给ESXi 5.x、6.0注入驱动。后来作者又推出了PowerShell脚本版,也就是ESXi-Customizer-PS,支持通过命令行操作,可以自动化、批量处理,而且对离线包的兼容性更好。现在网上能找到的教程大多围绕脚本版展开,原因很简单:图形版停止更新很久了,新版本ESXi支持不理想,脚本版却一直有社区维护,API调用也更灵活。
脚本版的本质是利用VMware官方的Image Builder组件来构建自定义镜像。你可以把它理解为"用PowerShell脚本包装了官方镜像构建流程",脚本负责解析离线包、加载驱动、选择镜像配置文件、导出ISO,把原本要敲一堆PowerCLI命令才能完成的操作压缩成一行命令。
1.3 你该不该用这个方案
这个方案不是给所有人准备的。如果你的服务器在VMware官方兼容列表里,老老实实用官方ISO肯定最省事,毕竟自定义镜像在官方技术支持层面是不受认可的。但对于玩家用机、DIY软路由、All in One主机的人来说,这几乎是唯一的出路。我见过不少人因为网卡不认,只好去买一张Intel的服务器网卡替换,其实先用ESXi-Customizer-PS试试,多半能省下这笔钱。
还有一个使用场景是批量装机。单位里有一批相同配置的机器需要部署ESXi,手动给每台机器装系统后再逐个注入驱动太浪费时间,直接把驱动合入ISO,装机一步到位,效率完全不一样。这也是脚本版比图形版更有价值的地方。
2. 原理和准备:脚本是怎么把驱动塞进镜像的
2.1 脚本背后的机制:Image Builder 离线打包
ESXi-Customizer-PS的运作原理,核心是VMware PowerCLI中的Image Builder模块。Image Builder支持两种操作模式:在线模式和离线模式。在线模式需要连接vCenter或者ESXi主机,从线上depot拉取软件包;离线模式则是直接操作本地下载好的离线包(Offline Bundle),从Zip文件里解析Image Profile和VIB。
脚本用的就是离线模式。它会把ESXi离线包Zip里的所有VIB读取出来,再把你准备的第三方VIB一并加入一个临时depot中,然后基于你指定的Image Profile创建一个新配置,把第三方VIB以"额外扩展"的形式加入,最后导出为ISO。整个过程在Windows本地完成,不需要ESXi主机参与。
有人可能会问,为什么不直接在装好的ESXi里用esxcli software vib install安装驱动?这当然也可以,但存在一个先有鸡还是先有蛋的问题:ESXi装好了,但网卡不识别,你根本没法通过网络把VIB传到主机上。虽然可以用esxcli的交互式操作或者维护模式从本地路径安装,但对新手来说门槛明显更高。离线注入的好处是从安装源头解决,系统装完驱动就在,一个U盘就能部署到任意相同硬件的机器上。
2.2 环境准备:Windows + PowerShell 5.1 + PowerCLI
ESXi-Customizer-PS运行在Windows环境下,严格说是Windows PowerShell环境下。这里有个容易踩的坑:脚本对PowerShell 7(也就是PowerShell Core)支持不好,最稳妥的是用系统自带的Windows PowerShell 5.1。
环境准备分四步走:
第一步,打开Windows PowerShell。在开始菜单搜索PowerShell,右键选择"以管理员身份运行",这一点很重要,否则后面安装模块和修改执行策略都可能失败。
第二步,调整执行策略。Windows默认禁止运行脚本,需要先执行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser执行后会提示确认,输入Y即可。这一步的意思是只允许运行本地脚本和经过签名的远程脚本,既保证安全,又不会卡住后续操作。
第三步,安装VMware PowerCLI模块。PowerCLI是VMware官方的PowerShell管理模块,ESXi-Customizer-PS依赖它来调用Image Builder:
Install-Module -Name VMware.PowerCLI -Scope CurrentUser如果网络环境允许,这个命令会从PowerShell Gallery拉取模块。安装过程中出现NuGet提供程序提示时,选择"是"即可。整个模块体积不小,需要耐心等一会儿。
第四步,验证安装结果:
Get-Module -ListAvailable VMware.PowerCLI Get-Command -Module VMware.ImageBuilder | Select-Object -First 5能看到命令列表,说明Image Builder模块已经就位。
提示:新版PowerCLI首次加载时可能提示是否加入CEIP(客户体验改进计划),按需选N或Y都可以,不影响功能使用。如果公司网络有代理,PowerShell Gallery连接不上的话,可以考虑配置代理或者换一个网络环境,这个属于基本网络问题,这里不展开。
2.3 素材准备:ESXi离线包与第三方VIB驱动包
环境搭好之后,需要准备两份核心素材:ESXi离线包和第三方VIB驱动包。
ESXi离线包长得和普通安装ISO不一样,它不是.iso文件,而是.zip格式,名字通常类似VMware-ESXi-7.0U2-xxxxxxx-depot.zip。这个zip包可以从VMware官网下载,现在Broadcom接管之后需要注册账号并关联产品授权,下载路径变了几次,但找 "VMware vSphere Hypervisor" 的离线包入口总归能找到。注意离线包和ISO是两个东西,下载的时候别搞混了,Image Builder只认zip格式的depot包。
第三方VIB驱动包就需要根据自己的硬件去对应厂商找。以最常见的Realtek网卡为例,官方会提供ESXi驱动下载,下载到一个zip压缩包,里面可能包含.vib文件、离线bundle以及一个说明文档。一些硬件厂商社区也会整理驱动下载页面。
拿到驱动包之后,先解压,目标是找到以.vib结尾的文件。有的下载包解压后还是一个包含vib的zip离线包,那就再解压一层。ESXi-Customizer-PS扫描-pkgDir参数指定的目录时,会找.vib后缀的文件,直接把多级嵌套的压缩包丢进去是不行的。
注意:VIB驱动和ESXi版本必须配套。ESXi 6.7的驱动,就别指望注入到7.0的离线包里还能正常工作;反过来也一样。驱动厂商一般会在下载页面标注支持的ESXi版本,下载前务必看清楚。
3. 实操:生成带第三方驱动的ESXi安装ISO
3.1 目录规划和脚本解压
素材备齐后,先规划一个干净的工作目录。我的习惯是把所有东西集中在一个文件夹下,避免后面路径写错。比如在C盘根目录建一个ESXi-Customizer文件夹,下面再分几个子目录:
C:\ESXi-Customizer\ ├── ESXi-Customizer-PS-v2.6.0.ps1 ├── ESXi-7.0U2-depot.zip └── drivers\ ├── 8105b.vib └── r8125.vibESXi-Customizer-PS脚本本身是一个独立PowerShell脚本文件,从社区下载或者从网上仓库拉取都可以。下载后核对一下脚本版本,确认支持的ESXi版本范围。虽然脚本主体已经稳定很久了,但下载来源一定要可靠,毕竟要对安装镜像动刀,脚本被篡改过会出大问题。
注意脚本文件的扩展名必须完整显示,有些下载工具可能把.ps1后缀弄丢,检查一下文件类型,确保能在PowerShell中正确加载。
3.2 执行注入命令(完整参数解析)
准备工作完成后,在管理员PowerShell窗口里切换到工作目录,然后执行注入命令。最核心的命令长这样:
cd C:\ESXi-Customizer .\ESXi-Customizer-PS-v2.6.0.ps1 -izip .\ESXi-7.0U2-depot.zip -pkgDir .\drivers -outDir .\output -v70 -nsc -noprompts这里每个参数都有讲究,下面逐个拆开说:
-izip参数指定ESXi离线包的位置,必须指向.zip格式的depot包,不能指向ISO。如果你只有一个ISO,没有zip包,那就需要先把ISO里的文件提取出来,或者另找depot版本。其实官网下载页通常ISO和depot包都会提供,直接下depot包最省事。
-pkgDir参数指定存放第三方VIB的目录,脚本会扫描这个目录下所有.vib文件并尝试加入镜像。这里我把所有驱动放在drivers子目录,路径写相对路径即可,注意路径里不要有中文,也不要带空格,免得解析出问题。
-outDir参数指定输出ISO的目录。执行完命令后,生成的自定义ISO会出现在output目录。可以自定义任意路径,但同样建议用简单英文路径。
-vXX参数非常重要,它告诉脚本要从离线包里选哪个Image Profile。例如-v60对应ESXi 6.0,-v65对应ESXi 6.5,-v67对应ESXi 6.7,-v70对应ESXi 7.0。如果不填,脚本可能会默认选择第一个profile,或者因为无法确定而报错。这里建议每次执行都显式写好版本参数,避免意外。
-nsc参数是跳过支持检查(Support Check)。ESXi社区版或者一些第三方驱动包在VMware官方支持检查里过不了,加上这个参数可以跳过检查,减少报错。如果执行时不加,脚本偶发提示不支持,容易中断流程,所以通常直接加上。
-noprompts参数是关闭交互提示,让脚本一路上自动运行。如果不加,脚本中途可能会问是否接受EULA、是否覆盖文件等交互问题,人盯着还好,万一离开一会儿脚本卡住就尴尬了。脚本参数解释可以看脚本开头注释,不同版本可能略有差异,但这个版本基本是稳定的。
执行后,能看到类似这样的输出流程:加载depot、解析VIB、创建Profile、添加VIB、导出ISO。整个过程持续几分钟,主要取决于离线包大小和电脑性能。看到导出ISO文件成功,并且生成类似ESXi-7.0U2-customized.iso的文件,就说明注入完成。
3.3 注入成功后的检查和验证
ISO生成后,先别急着去装机,花一分钟做个快速验证。可以用7-Zip打开生成的ISO,看看里面有没有vm.gz、efi目录等关键文件。如果ISO能正常打开、目录结构完整,至少说明导出过程没出错。
更严谨的验证方式是把ISO挂载到虚拟机上,或者直接用VMware Workstation建个虚拟机从ISO启动,看启动界面是否正常。不过这需要额外时间,如果只是物理机装机,直接做启动U盘去目标机器上试也行。我第一次操作时直接在真机上试了,好在一次通过。
这里有一个经常被忽略的细节:ISO里驱动是否真的进去,用肉眼是看不出来的。真正判断标准是装完ESXi后,进入DCUI(Direct Console User Interface),按F2打开管理界面,看网卡是否被识别。只要网卡出现在配置界面里,驱动注入就算成功了。这也是我后来装机改用的验证方式——效率最高,直接一步到位。
3.4 用自定义ISO安装ESXi的完整要点
ISO生成后,需要把它做成启动U盘。网上常用的工具是Rufus,选择ISO文件后会提示写入模式,默认的ISO模式即可,不需要强制选择DD模式。写入完成后,把U盘插到目标机器上,开机进BIOS设置从U盘启动。
安装过程中有几个点需要特别注意。首要的一点是Secure Boot问题。ESXi 7.0之后默认支持Secure Boot,但自定义ISO里注入的第三方VIB没有VMware官方签名,在开启Secure Boot的UEFI模式下极可能启动失败。所以装机前,进BIOS把Secure Boot关闭。如果是一台需要严格安全环境的服务器,那就不要用第三方驱动,老老实实买兼容硬件。
其次是引导模式的选择。如果是家用主板,UEFI和Legacy模式都支持,建议BIOS里开启UEFI引导,然后关闭Secure Boot,这和主流U盘的引导兼容性最好。某些老主板默认Legacy引导,Rufus写入的U盘也能适配,不要纠结,能启动就行。
安装完成进入系统后,建议执行一条命令确认驱动状态:
esxcli software vib list | grep <驱动名称关键词>比如装了Realtek的r8125网卡驱动,就grep r8125,能看到对应驱动条目以及版本号,驱动就确认到位了。这一步不是必须的,但可以帮助判断问题方向,后面排查也方便。
4. 常见问题与排错速查
4.1 脚本无法启动或命令不识别
很多人卡在最开始的一步:执行脚本时PowerShell直接报"无法加载文件,因为在此系统上禁止运行脚本"。这个报错基本可以断定是执行策略没有放开。解决方法是回到第二章说的Set-ExecutionPolicy RemoteSigned,记得要以管理员身份运行PowerShell。
还有一种情况是即使用管理员身份,依然提示模块找不到、New-PSDrive之类命令不识别。这通常意味着VMware PowerCLI安装不完整,或者PowerShell路径加载不到模块。可以先重启PowerShell窗口,再执行Get-Module -ListAvailable VMware.PowerCLI确认模块是否存在。如果模块列表里没有,重新安装一次PowerCLI就好。
我遇到过挺特殊的报错,是在Windows PowerShell和PowerShell 7混用的情况下产生的:明明PowerCLI在PowerShell 7里装了,脚本却用Windows PowerShell去跑,两边模块路径不一样,自然找不到。所以建议统一使用Windows PowerShell 5.1跑完整流程,不要把两个版本混着用。
4.2 驱动注入后启动失败:Secure Boot与签名
这是自定义ISO最容易翻车的地方。装好系统后虚拟机或者物理机启动卡在引导阶段,屏幕出现红色报错,或者直接黑屏,十有八九和Secure Boot有关。
前面提到,VMware 7.0及以后版本对UEFI Secure Boot支持更严格。注入的VIB如果没经过官方签名验证,Secure Boot会拒绝加载,直接导致启动失败。解决办法就一个:进BIOS关掉Secure Boot。这一步不复杂,开机按Del或者F2进BIOS,找到Secure Boot选项,设置为Disabled,保存重启即可。装完系统后,如果没有硬性安全需求,也可以一直保持关闭。
不过需要说明的是,不是所有第三方驱动都会在启动阶段生效,有些驱动是"加载型"的,引导时不参与,到系统起来后才加载,这类驱动在Secure Boot开启下反而能正常用。问题在于我们无法百分百预判某个驱动的行为,所以还是关闭Secure Boot最稳妥。
4.3 驱动注入不生效的几种情况
生成ISO看着没问题,安装也顺利,但进系统网卡依旧不出现。这种情况通常是以下三个原因之一。
第一个原因是VIB版本和ESXi版本不匹配。比如往7.0的depot里塞6.5的驱动,脚本可能不加提示就完成了注入,但驱动内核接口对不上,启动后加载失败。这种问题只能去驱动厂商页面重新下载对应ESXi版本的VIB。
第二个原因是驱动VIB文件本身损坏或不完整。有些下载链接给的zip,解压时因为压缩工具版本问题导致vib文件截断。建议重新下载、重新解压,用比较标准的解压工具处理后再次注入。
第三个原因是VIB包里的驱动对应的硬件型号和实际不符。比如你网卡是RTL8125B,下载的VIB只支持RTL8125A,型号不完全匹配照样识别不了。所以下载驱动时,建议根据网卡实际芯片型号仔细核对,必要时用设备管理器确认硬件ID再找驱动。
4.4 安装阶段的认知误区
还有一类问题属于"教程看少了"的误会。有人把自定义ISO做好后,直接用UltraISO改原版ISO的方式来加驱动,这不靠谱。ESXi驱动集成不是往ISO文件里塞个驱动文件就能生效的,必须通过Image Builder构建镜像配置,VIB注册到系统仓库里,驱动才会在启动时被正确加载。
也有人问能不能在装好的ESXi上用虚拟机方式解决驱动问题,这类软件层面的"歪门邪道"都是行不通的。ESXi的物理网卡驱动必须存在vmkernel层面,虚拟机里做不了,只能从镜像层解决。
4.5 常见问题速查表
| 现象 | 直接原因 | 解决办法 |
|---|---|---|
| 脚本被禁止运行 | 执行策略未放开 | Set-ExecutionPolicy RemoteSigned |
| 找不到PowerCLI命令 | 模块未安装或版本混用 | 管理员PowerShell重装VMware.PowerCLI |
| 打开depot失败 | 离线包路径错误或文件损坏 | 检查-izip路径,核对sha256 |
| 没有匹配的Image Profile | -v版本参数和depot版本不一致 | 修改-v参数为对应版本 |
| 注入后启动失败 | Secure Boot阻止无签名VIB | 关闭BIOS中的Secure Boot |
| 装完网卡仍不识别 | VIB版本/型号不匹配 | 核对驱动版本与硬件型号 |
| ISO文件无法引导 | U盘写入方式不对 | 用Rufus标准ISO模式重写U盘 |
这些坑我基本都踩过一遍,现在回头总结,其实问题都不复杂,关键是顺序别乱。执行策略、模块安装、命令参数、BIOS设置,这四样都对了,流程基本就顺畅了。
5. 最后一件事:驱动宁可少而精,不要贪多
最后分享一个我自己踩坑后的操作习惯。用ESXi-Customizer-PS集成驱动的时候,驱动目录里永远只放这台机器真正需要的VIB,绝不贪多。市面上能找到的各种驱动合集包看起来很省事,一塞就是十几个VIB,但副作用是ISO体积变大、排查问题更麻烦,甚至可能出现多个驱动抢占同名网卡的情况。我最早就是图省事,把所有能找到的网卡驱动全塞进去,结果某次装完系统,驱动列表里一团乱麻,反而不好判断默认加载了哪个驱动。
现在我的做法是:先确认主板型号和网卡芯片,去厂商页面找对应ESXi版本的VIB,单独下载后注入。这套流程用下来,成功率几乎百分百。ESXi-Customizer-PS这个脚本我从6.x一直用到7.x,操作逻辑基本没大变,希望这篇文章也能帮你省下一个周末。