| 
 | 
 
 本帖最后由 as8686886 于 2024-4-2 20:57 编辑  
 
目前已经实现以下功能: 
1、PXE启动自动支持传统BIOS和UEFI启动,WinPE的Wim文件可自由随意更换不会出现启动不了情况。 
 
 
 
 
2、自动启动Netcopy、傲梅网络还原客户端、Ghost网克等,菜单自定义相关软件的WIM和IMG文件,且默认启动 
 
 
3、从PXE服务端拉取自动运行配置文件(pxeautorun.txt)并自动运行。 
 
 
4、从PXE服务端拉取ISO文件,并自动挂在到客户端PE系统,可达到采用WinSetup、Wit安装原版系统 
 
 
5、客户端启动服务端(TightVNC远程控制)自动开启客户端远程桌面窗口 
TightVNC服务端开启监听模式、客户端开启自动连接服务端,服务端自动开启客户端远程桌面窗口 
其他bug观察修复。 
 
目前遇到问题: 
PE环境下首次可以正常获取pxeautorun.txt内容并正确执行,如果删掉生成的pxeautorun.txt内容的批处理后无法再次实时获取pxeautorun.txt内容 
分析脚本如下:- _SUB autorun
 
 -      REGI $HKLM\SYSTEM\CurrentControlSet\Control\PEBootServerAddr,&&ServerAddr (读取该键值:值为服务器端IP)
 
 -      REGI $HKCU\Software\TightVNC\Control\ReverseConnectionHistory\0=%&ServerAddr% (读取该键值:值为服务器端IP,备用键值)
 
 -      EXEC =!CMD.EXE /C "DEL /Q /F %windir%\system32\%&ServerAddr%.cmd"
 
 -      exec =!tftp -i %&ServerAddr% get pxeautorun.txt %windir%\system32\%&ServerAddr%.cmd
 
 -      wait 500
 
 -      exec %windir%\system32\%&ServerAddr%.cmd
 
 -      exit file
 
 - _END
 
  
- SERV !IKEEXT
 
 - EXEC -hide taskmgr.exe
 
  
- SERV !IKEEXT
 
 - exec *drvload %windir%\inf\netrndis.inf %windir%\inf\wceisvista.inf
 
 - regi #HKLM\SYSTEM\ControlSet001\Services\IKEEXT\start=0x03
 
 - REGI $HKLM\SYSTEM\CurrentControlSet\Control\PEBootType,&&Boottype
 
 - kill taskmgr.exe
 
 - FIND $Remote=%&Boottype%,call autorun (判断HKLM\SYSTEM\CurrentControlSet\Control\PEBootType键值是否为Remote,是就执行call autorun)
 
 - forx *.*.*.*.cmd,&&bat,1 ,team NAME &&fNam=%&bat% | exec %&bat% %&fNam%
 
 - EXIT FILE
 
  复制代码 
无法再次实时获取pxeautorun.txt内容 
经检查注册表无PEBootServerAddr键值,Boottype内容为Ramdisk:SourceUnidentified不符合脚本执行条件 
 
 
 
解决思路: 
1、首次获取获取通过命令写入注册表相关键值(可以正常使用,不完美。)pxeautorun.txt文件添加下面两条命令;- Reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control" /v "PEBootServerAddr" /t REG_SZ /d "%serverip%" /f>nul 2>nul
 
 - Reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control" /v "PEBootType" /t REG_SZ /d "Remote" /f>nul 2>nul
 
  复制代码 
2、通过启动WIMBoot引导写入PE注册表键值,图片这个启动步骤(期待高手解惑) 
 
最终解决方法 
pxeboot.n12启动: 
检查启动的BCD这个是否为{ramdiskoptions},如果不是使用以下命令更改(标红地方更改为自己使用的相关键值)- bcdedit.exe /store Boot\BCD /set {7619dcc9-fafe-11d9-b411-000476eba25f} osdevice ramdisk=[boot]\boot.wim,{ramdiskoptions}
 
 - bcdedit.exe /store Boot\BCD /set {7619dcc9-fafe-11d9-b411-000476eba25f} device ramdisk=[boot]\boot.wim,{ramdiskoptions}
 
  复制代码 
最终效果如下: 
 
 
进入PE之后注册表也有了相关键值,相关键值为自动生成并且为正确值,获取pxeautorun.txt文件内容的ini文件也正常使用。 
 
 
pxeautorun.txt里的代码由原来的5行删减为2行 
 
 
总结:添加启动项使用了BOOTICE工具添加wim启动项,该工具生成的BCD启动项里面device和键值osdevice后面不是{ramdiskoptions} 
建议使用命令添加启动项: 
legacy模式: 
- bcdedit.exe /createstore Boot\BCD
 
 - bcdedit.exe /store Boot\BCD /create {ramdiskoptions} /d "Ramdisk options"
 
 - bcdedit.exe /store Boot\BCD /set {ramdiskoptions} ramdisksdidevice boot
 
 - bcdedit.exe /store Boot\BCD /set {ramdiskoptions} ramdisksdipath \Boot\boot.sdi
 
 - bcdedit.exe /store Boot\BCD /create {19260817-6666-8888-f00d-999999999999} /d "Windows 10 PE" /application osloader
 
 - bcdedit.exe /store Boot\BCD /set {19260817-6666-8888-f00d-999999999999} device ramdisk=[boot]\boot.wim,{ramdiskoptions} 
 
 - rem bcdedit.exe /store Boot\BCD /set {19260817-6666-8888-f00d-999999999999} path \windows\system32\winload.exe 
 
 - bcdedit.exe /store Boot\BCD /set {19260817-6666-8888-f00d-999999999999} osdevice ramdisk=[boot]\boot.wim,{ramdiskoptions} 
 
 - bcdedit.exe /store Boot\BCD /set {19260817-6666-8888-f00d-999999999999} systemroot \windows
 
 - bcdedit.exe /store Boot\BCD /set {19260817-6666-8888-f00d-999999999999} detecthal Yes
 
 - bcdedit.exe /store Boot\BCD /set {19260817-6666-8888-f00d-999999999999} winpe Yes
 
 - bcdedit.exe /store Boot\BCD /create {bootmgr} /d "boot manager"
 
 - bcdedit.exe /store Boot\BCD /set {bootmgr} timeout 5 
 
  复制代码 UEFI模式: 
- bcdedit.exe /createstore Boot\BCD
 
 - bcdedit.exe /store Boot\BCD /create {ramdiskoptions} /d "Ramdisk options"
 
 - bcdedit.exe /store Boot\BCD /set {ramdiskoptions} ramdisksdidevice boot
 
 - bcdedit.exe /store Boot\BCD /set {ramdiskoptions} ramdisksdipath \Boot\boot.sdi
 
 - bcdedit.exe /store Boot\BCD /create {19260817-6666-8888-f00d-999999999999} /d "Windows 10 PE" /application osloader
 
 - bcdedit.exe /store Boot\BCD /set {19260817-6666-8888-f00d-999999999999} device ramdisk=[boot]\boot.wim,{ramdiskoptions} 
 
 - rem bcdedit.exe /store Boot\BCD /set {19260817-6666-8888-f00d-999999999999} path \Windows\system32\boot\winload.efi
 
 - bcdedit.exe /store Boot\BCD /set {19260817-6666-8888-f00d-999999999999} osdevice ramdisk=[boot]\boot.wim,{ramdiskoptions} 
 
 - bcdedit.exe /store Boot\BCD /set {19260817-6666-8888-f00d-999999999999} systemroot \windows
 
 - bcdedit.exe /store Boot\BCD /set {19260817-6666-8888-f00d-999999999999} detecthal Yes
 
 - bcdedit.exe /store Boot\BCD /set {19260817-6666-8888-f00d-999999999999} winpe Yes
 
 - bcdedit.exe /store Boot\BCD /create {bootmgr} /d "boot manager"
 
 - bcdedit.exe /store Boot\BCD /set {bootmgr} timeout 5 
 
  复制代码 
ipxe.pxe或undionly.kpxe启动: 
之前一直通过计算机名获取PXE服务端IP地址,昨晚遇到bug,我主机有三块网卡,客户端通过ping 服务器主机名获取到的地址是另外一个网卡的地址,当主机其他网卡都禁用只留一个网卡的情况下又正常(偶尔现象),这样就会导致客户端通过tftp取服务端获取脚本失败。想了一晚想到一个目前能想到的最佳方法 直接将服务端提供PXE启动的网卡IP在IPXE启动的时候自动将注入到PE里,在PE里通过批处理来获取服务端IP地址,这样就不会出现获取到其他服务端非服务网卡ip地址的情况。 
 
 
 
 
1、menu.txt文件做如下修改: 
 
 
2、IP.SYS内容 
 
 
 
 
 
 
 
 |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |