主题
潇然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客户端回连