可能很多用过WDS的人都有这样一个想法:
默认情况下,网络启动PE后,就自动加载cmd窗口。能不能修改下,然他启动ghost,然后就可以网络ghost?
有没有什么办件,简单修改下WAIK工具生成的PE镜像,就实现这个功能?

 

在帮助文档中,有专门的一章《将自定义脚本包括在 Windows PE 映像中》。
里面就提到了三种方法启动自定义脚本:
Winpeshl.ini
Startnet.cmd
Autounattend.xml

 

其中,第一个方法讲解最详细,还有例子、配置文件示例。甚至明确的说“若要在 Windows PE 引导时自动启动此应用程序,则可使用 Winpeshl.ini 文件创建启动脚本。”
看一下文档就觉得很容易,可能很多人,就尝试使用第一个方法了。

 

但是,帮助文档中对于其中的关键点、难点,又不特别指明,存在误导的嫌疑。

这里明确下关于Winpeshl.ini的一些重点问题,让大家少走弯路。


1、Winpeshl.ini文件控制/引导的是自定义外壳程序(shell application)。
2、你必须在自定义外壳程序调用Wpeinit.exe来负责处理即插即用或网络支持。
3、当PE退出自定义外壳应用程序时,Windows PE 将重新启动。

 

这样的前提限制下,就无法简单实现网络Ghost的自动启动。


唯一的办法是自己编写一个程序,把它作为shell,添加到Winpeshl.ini。然后,这个自己编写的shell,调用Wpeinit.exe负责处理即插即用或网络支持,然后,再调用Ghost启动。
尝试过自己编写一个bat作为shell,但不成功。


其实,最简单的还是用Startnet.cmd这个方法。
在帮助文档中,对于这个简单的方法,却语言含糊:

“编辑 Startnet.cmd 以包括自定义命令。
注意: 
要获得即插即用或网络支持,请确保在自定义的 Startnet.cmd 脚本中包括对 wpeinit 的调用。”


实际是:直接用记事本在Startnet.cmd文件里面,增加一行ghost就可以了!(Ghost.exe文件保存在system32路径下)


整个文件就像这样简单:
wpeinit
ghost

这样,shell还是原版的cmd窗口,也依次启动网络、ghost,顺利完成目的。

 

 

整个步骤如下:

 

1、通过使用 DISM 工具将基本映像装载到本地的 Windows PE 目录。例如:
Dism /Mount-WIM /WimFile:D:\winpe_x86\winpe.wim /index:1 /MountDir:c:\winpe_x86\mount

2、将Ghost应用程序文件复制到 Windows PE 本地目录中。
最好复制到c:\winpe_x86\mount\Windows\system32目录下。
注意,复制ghost的windows32位版本,不是dos版本。

3、记事本修改c:\winpe_x86\mount\Windows\system32目录下的Startnet.cmd文件。
在wpeinit行下,增加一行ghost。

4、在完成对映像的修改之后,保存、卸载此映像。
dism /unmount-wim /Mountdir:c:\winpe_x86\mount /commit