as8686886 发表于 2024-3-10 18:26:22

PXE启动Windows PE添加自动执行脚本功能的研究0402(已解决)

本帖最后由 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.wim,{ramdiskoptions}
bcdedit.exe /store Boot\BCD /set {7619dcc9-fafe-11d9-b411-000476eba25f} device ramdisk=\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.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.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.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.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内容






yyz2191958 发表于 2024-3-10 18:33:05

谢谢分享

as8686886 发表于 2024-3-10 19:03:32

yyz2191958 发表于 2024-3-10 18:33
谢谢分享

就是给WinPE加一个远程维护通道,便于网络克隆、批量还原,自动装系统等自动化操作。winsetup和傲梅都是有命令行的,有这个功能就可以通过命令行自动备份还原、安装系统

邪恶海盗 发表于 2024-3-10 19:21:37

我是集成了自动启用Ghost网克客户端玩的,傲梅也用网克工具?

as8686886 发表于 2024-3-10 19:28:04

邪恶海盗 发表于 2024-3-10 19:21
我是集成了自动启用Ghost网克客户端玩的,傲梅也用网克工具?

傲梅更简单,直接用傲梅镜像部署就行了。

aigpt 发表于 2024-3-10 19:29:40

回复下载 感谢分享

2012andyle113 发表于 2024-3-10 19:42:21

看着很不错的样子

bfgxp 发表于 2024-3-10 19:47:30

可以,虽然一根葱早已实现这些功能,但自己再实现一次还是很有用的。
我自己也实现过自动支持mbr与efi启动的代码。

as8686886 发表于 2024-3-10 19:59:27

bfgxp 发表于 2024-3-10 19:47
可以,虽然一根葱早已实现这些功能,但自己再实现一次还是很有用的。
我自己也实现过自动支持mbr与efi启动 ...

是的,自己弄一次,里面一些细节性的东西就完全弄明白了,通过http挂在iso和把服务端脚本通过PXE自动加入pe并运行

yuguotqing 发表于 2024-3-10 20:15:16

赞 感谢分享

bfgxp 发表于 2024-3-10 20:17:10

as8686886 发表于 2024-3-10 19:59
是的,自己弄一次,里面一些细节性的东西就完全弄明白了,通过http挂在iso和把服务端脚本通过PXE自动加入 ...

#!ipxe
ifconf
set boot-url http://${next-server}
#>Begin iPXEBoot ===========================================
:ipxe_menu
    menu iPXE Boot Menu // ${ip}
    item --key 0 BootLocalSystem      Exit ipxe and boot the local system!(Hotkey 0)
    item --key 1 LightningPE10          Linghtn10PENet......................(Hotkey 1)
    item --key 2 LightningPE11          Linghtn11PENet......................(Hotkey 2)
    item --key 3 kuerPE10               kuer10PENet.........................(Hotkey 3)
    item --key 4 kuerPE11               kuer11PENet.........................(Hotkey 4)
    item --key r rebootPC               Restart the computer!...............(Hotkey r)
    item --key t TinyCore               TinyCoreX86.........................(Hotkey t)
    choose --timeout 15000 --default BootLocalSystem selected
    goto bootpe
#============ WinPE Menu Options =============
:bootpe
    iseq ${selected} TinyCore && goto TinyCore ||
    iseq ${selected} BootLocalSystem && Exit ||
    iseq ${selected} rebootPC && reboot ||
    kernel ${boot-url}/wimboot
    initrd ${boot-url}/TSDTp_x64.exe            TSDTp_x64.exe                  
    iseq ${platform} efi && initrd ${boot-url}/bootmgfw.efi bootmgfw.efi || initrd ${boot-url}/bootmgr bootmgr
    initrd ${boot-url}/bcd                      bcd
    initrd ${boot-url}/boot.SDI               boot.sdi
    iseq ${platform} efi && initrd -n boot.wim ${boot-url}/wim/${selected}.wim || initrd ${boot-url}/wim/${selected}.wim boot.wim
    boot   
    goto ipxe_menu

:TinyCore
    initrd ${boot-url}/iso/TinyCore-current.iso
    chain ${boot-url}/memdisk iso
    boot
    goto ipxe_menu
贴出我实现自动mbr与efi的启动代码,楼主看看有没有什么需要改进的

lyrgcy 发表于 2024-3-10 20:24:07

楼主可以分享下载学习下吗{:1_194:}

wjsk10 发表于 2024-3-10 20:25:56

谢谢分享

zhangze 发表于 2024-3-10 20:40:09

很方便。

bjay2008xmy 发表于 2024-3-10 20:51:13

as8686886 发表于 2024-3-10 20:57:02

本帖最后由 as8686886 于 2024-3-10 20:58 编辑

bjay2008xmy 发表于 2024-3-10 20:51
做过这个东西,叫做TinyPXEServer-win远程CMD命令,从服务端下载一个TXT再改名成BAT运行,还有MD5校验
对就是跟这类似,我之前移植别人的PE一直用这个功能,最近换了自己新做的PE的Wim包直接起不来了,花了点时间把这个整个细节详细研究了一下。

1801403 发表于 2024-3-10 21:28:51

楼主,一起打包上来,给大伙一起研究啊

bjay2008xmy 发表于 2024-3-10 21:29:15

邪恶海盗 发表于 2024-3-10 21:46:53

bfgxp 发表于 2024-3-10 20:17
贴出我实现自动mbr与efi的启动代码,楼主看看有没有什么需要改进的

TinyPXEServer 云端网络启动小试,适用于BIOS/UEFI (请允许我标题一回) By:邪恶海盗 - 网络启动区 - 无忧启动论坛 - Powered by Discuz!
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=419305

你可以参考一下我以前写的

nathan6498 发表于 2024-3-11 00:04:36

学习学习

namsoo 发表于 2024-3-11 07:27:28

赞 感谢分享

dfw9 发表于 2024-3-11 08:50:53

网站还需要古老的Flash吗?

szwp 发表于 2024-3-11 09:06:57

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=378234

和这个狠像

yc2428 发表于 2024-3-11 10:42:01

谢谢分享

邪恶海盗 发表于 2024-3-11 11:59:51

dfw9 发表于 2024-3-11 08:50
网站还需要古老的Flash吗?

好像这个一键复制的功能是要FLASH支持,可以用右键复制...

aigpt 发表于 2024-3-11 12:43:07

回复下载 感谢分享

guies 发表于 2024-3-11 13:17:50

之前我也是選了數個 PXE 啟動來玩,
最後我覺得最好用的還是微軟的 PXE 啟動,
同時支援 BIOS 和 UEFI 啟動,
最重要的是可以 SecureBoot 啟動。
編輯也很簡單,編輯 BCD 檔即可。
缺點就是只能啟動 Windows,但我也只需要啟用 Windows 即可。
其它的PXE不是啟動太慢,不然就是有時會啟動失敗,
而微軟的PXE我沒啟動失敗過。



wang1126 发表于 2024-3-11 13:31:57

谢谢分享

zqfeng01 发表于 2024-3-11 13:45:06

谢谢分享

as8686886 发表于 2024-3-11 21:54:01

guies 发表于 2024-3-11 13:17
之前我也是選了數個 PXE 啟動來玩,
最後我覺得最好用的還是微軟的 PXE 啟動,
同時支援 BIOS 和 UEFI 啟 ...

我局域网内架设的有微软的WDS服务器,也用过傲梅的PXE启动工具,搞这个可以diy
页: [1] 2 3
查看完整版本: PXE启动Windows PE添加自动执行脚本功能的研究0402(已解决)