Skip to content

潇然PE启动高级使用 - 2.进阶篇 - 2.2.PXEAutoRun

本视频将为大家介绍Windows 原生启动方案,和在Windows 原生启动方案下,怎么用PECMD读取相关注册表获取TinyPXE服务器IP(next server)并通过TFTP下载PXEAutoRun.cmd

视频备用地址

视频开头测试了 iPXE + TFTP 的速度,并测试切换Windows 原生启动 + TFTP后的速度

测试发现PXEAutoRun.cmd没有正常执行,并分析潇然PE启动的相关PECMD脚本

CMD
//PXE支持
REGI $HKLM\SYSTEM\CurrentControlSet\Control\PEBootType,&&Boottype
REGI $HKLM\SYSTEM\CurrentControlSet\Control\PEBootServerAddr,&&ServerAddr
FIND $Remote=%&Boottype%,EXEC =TFTP -i %&ServerAddr% get PXEAutoRun.cmd %windir%\system32\PXEAutoRun.cmd
IFEX %windir%\system32\PXEAutoRun.cmd,EXEC PXEAutoRun.cmd %&ServerAddr%

通过访问注册表发现,HKLM\SYSTEM\CurrentControlSet\Control下,PEBootType(Remote)、PEBootServerAddr(TinyPXE服务器 next server IP)已经正常获取,只是由于PE内缺少TFTP客户端导致无法下载PXEAutoRun.cmd,后续更新会修复这个问题

其中PEBootServerAddr(TinyPXE服务器 next server IP)会通过作为%1参数传入PXEAutoRun.cmd,可以通过aria2c、curl等程序直接下载相关文件到PE调用相关安装器自动安装

2023.9.6更新:此问题已经跟进处理!

由于我们有需求将此项目投入生产环境使用,目前我们发现 TinyPXEServer 的 TFTP 服务器无法使用 Windows 自带的 TFTP.exe 访问,因此决定废弃通过 TFTP 协议下载 PXEAutoRun.cmd,由于潇然PE有aria2c,故直接转为 HTTP 协议下载 PXEAutoRun.cmd

相关PECMD脚本已更换为:

CMD
//PXE支持
REGI $HKLM\SYSTEM\CurrentControlSet\Control\PEBootType,&&Boottype
REGI $HKLM\SYSTEM\CurrentControlSet\Control\PEBootServerAddr,&&ServerAddr
FIND $Remote=%&Boottype%,EXEC =aria2c "http://%&ServerAddr%/PXEAutoRun.cmd" -d "%windir%\system32" -o "PXEAutoRun.cmd"
IFEX %windir%\syswow64\PXEAutoRun.cmd,FILE -q %windir%\syswow64\PXEAutoRun.cmd->%windir%\system32\PXEAutoRun.cmd
IFEX %windir%\system32\PXEAutoRun.cmd,EXEC PXEAutoRun.cmd %&ServerAddr%

由于aria2c下载时会自动对重复的文件进行重命名,因此PXEAutoRun.cmd还是以第一次获取到的为准

由于aria2c主程序可能为32位,64位PE下可能会将PXEAutoRun.cmd下载到syswow64下,所以加了移动功能

由于手机录制过程中没电自动关机,再补充一点:

对于使用 iPXE 的启动方案,PXEAutoRun.cmd由iPXE直接加载到PE的System32目录,因此可以正常执行PXEAutoRun.cmd,无需TFTP客户端回连

潇然PE启动 是 潇然系统 的一个子项目