社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 2223阅读
  • 9回复

用Sysprep打造高质量的系统映像

楼层直达
级别: 管理员
发帖
3549
飞翔币
5005
威望
64392
飞扬币
51613
信誉值
815
用Sysprep打造高质量的系统映像

Sysprep是一个“系统准备”工具,主要功能是在创建磁盘映像之前删除当前操作系统的所有唯一性信息,便于Ghost之类的工具复制磁盘映像。不过除此之外,Sysprep还有其他许多功能,充分利用这些功能将大大提高映像的质量。
  一、延长映像的生存期
  建筑需要坚固的基础才能经受住时间的考验,同样地,构造系统映像也需要优质的原材料和高超的技巧。为了构造出高质量的系统映像,不能让根本没用的驱动程序、注册键、应用程序混入映像文件,所以用来创建映像的源机器一定要全新安装。
  在准备创建映像的过程中,Sysprep会断开源机器与域的联系——所以只要有可能,应该尽量避免将源机器加入到任何域,可以用本地的Administrator帐户安装应用程序、Service Pack和实施各种定制操作。为了尽可能地延长映像文件的使用时间,这个阶段的定制操作应当慎重。如果要改变某些设置,尽可能用cmdlines.txt脚本(后面将有详细讨论)。
  在Windows中,每一个用户帐户有它自己的一套配置数据,如每个用户有不同的桌面设置、“我的文档”等,这类配置数据统称为配置文件。Windows会自动为每个新建的用户帐户设置默认的配置文件,但默认配置文件往往不能满足需要,必须经过定制才适合使用。对于大多数小型网络环境(或独立的机器),由于没有域服务器,不能通过组策略发布和管理用户的配置文件。那么,是否可以将定制的配置文件作为默认的配置文件加入到映像文件,也就是说,以后新建用户帐户时,让Windows自动将定制的配置文件作为默认配置文件呢?答案是肯定的,具体实现步骤是:
  ⑴ 建立一个临时的本地帐户,登录该帐户,定制桌面、开始菜单以及其他想要定制的与用户配置文件有关的设置,完成后,注销该帐户,然后用Administrator帐户登录。
  ⑵ 为便于后继步骤的操作,配置资源管理器,使其显示隐藏的文件和文件夹。
  ⑶ 右击“我的电脑”,选择“属性”,然后点击“高级”选项卡。在“用户配置文件”下面点击“设置”,选择为临时用户创建的配置文件,然后点击“复制到”,转到%SystemDrive%\Documents and Settings,选择Default User文件夹,点击“确定”。
  ⑷ 在“允许使用”下面点击“更改”,输入everyone,如图一;点击“确定”、“确定”。
⑸ 当系统询问是否要覆盖现有的默认用户配置文件时,回答“是”。

经过这番设置之后,第一次登录该系统(或用该映像创建的系统)的用户将采用上面设定的默认用户配置文件。
  大多数较新的机器都需要操作系统安装盘本身没有提供的驱动程序。那么,如何让这类驱动程序也能自动安装呢?你必须把它们复制到硬盘上的某个位置,然后修改sysprep.inf指定这些位置(参见附录“自动创建Sysprep.inf文件”)。具体的操作步骤是:
  ㈠ 在系统驱动器的根目录下创建一个Sysprep目录,用来保存运行Sysprep必需的执行文件和sysprep.inf文件。
  ㈡ 在系统驱动器的根目录或Sysprep目录下创建一个Drivers目录——如果你要让目标机器运行好最小安装后能够使用这些驱动程序,则在根目录下创建Drivers文件夹;如果将驱动程序保存在Sysprep目录下的文件夹,最小安装过程将清除它们(最小安装是Windows常规安装过程的简化版,它只询问尚未在sysprep.inf中回答的问题)。
  ㈢ 在Drivers文件夹下,为不同的硬件设备创建相应的子目录保存驱动程序,将所有第三方驱动程序复制到相应的子目录。
  ㈣ 接下来还要设置一下sysprep.inf文件,以便最小安装过程能够找到驱动程序,如下面的例子所示。注意安装程序不会搜索OemPnPDriverPath路径的子目录,所以每一个目录都必须分别指定:
 
;SetupMgrTag
[Unattended]
OemSkipEula=Yes
OemPnPDriverPath=Sysprep\Drivers\NETWORK;Sysprep\Drivers\AUDIO;
Sysprep\Drivers\MODEM;Sysprep\Drivers\VIDEO;
二、挖掘sysprep.inf的潜力
  要让同一个映像适用于不同类型的硬件系统,最关键的是要设置好sysprep.inf文件的SysprepMassStorage小节。你可以手工在这个小节中加入大容量存储设备的驱动程序,使得具有不同磁盘控制器的系统能够共享映像;或者干脆一点,你可以让Sysprep自动填写该小节,加入操作系统带有的所有大容量存储设备。
  第二种办法的优点是一个映像文件可以支持大量的硬件设备——即使是创建映像时你还不可能想到的那些设备;其缺点是,在Sysprep处理期间引入所有的驱动程序需要额外耗费10到15分钟的时间,而且必须在目标系统上用-clean参数运行Sysprep。
  让Sysprep自动加入大容量存储设备的操作步骤是:
  ⑴ 首先确保sysprep.inf同时提供Sysprep和SysprepMassStorage小节。
  ⑵ 在Sysprep小节下面创建如下指令:BuildMassStorageSection=Yes。
  ⑶ 打开一个命令窗口,转到sysprep.exe所在的目录,执行命令sysprep -bmsd。Sysprep将构造出SysprepMassStorage小节的内容并结束。
  ⑷ 接着执行Sysprep -mini,完成最后的Sysprep操作。
  除了SysprepMassStorage小节之外,sysprep.inf还有其他许多配置项目值得好好利用。例如,UserData小节用来定义安装期间典型问题的答案,凡是最小安装期间希望手工输入的内容,保留空白即可。如果你想让映像既能够用于多处理器的系统,也能够用于单处理器的系统,可以在Unattended小节中设定UpdateHAL或UpdateUPHAL。Identification小节的作用是自动加入域或者工作组。
  最后,你可以用GuiUnattended小节的OEMDuplicatorString设置来辅助管理映像文件的修订,这个设置选项将把指定的字符串值加入到所有由该映像构造的系统;以后,当你要检查一下某台机器的操作系统是由哪一个映像构造时,可以检查注册键HKEY_LOCAL_MACHINE\SYSTEM\Setup\OemDuplicatorString确定原来的映像。
  三、自动执行操作
  为了提高安装过程的灵活性,你可以在安装期间或之后自动运行一些命令。如果要在最小安装结束后安装软件或运行程序、批命令文件、脚本,只要将相应的指令写入cmdlines.txt文件;如果要在目标系统重新启动后安装程序或运行命令,则必须将指令写入sysprep.inf文件的GuiRunOnce小节。
  ■ cmdlines.txt
  这个文件位于%SystemDrive%\Sysprep\i386\$oem$目录。下面是一个例子,它以-clean参数运行Sysprep,另外还执行Script1批命令、Program2程序:
[Commands]
"%SystemDrive%\Sysprep\Sysprep.exe -clean"
"FullPath\Script1.cmd"
"FullPath\Program2.exe -arg1"
  cmdlines.txt文件的格式很简单,不过要注意以下几点:
  ⑴ sysprep.inf文件Unattended小节必须声明InstallFilesPath,并且使其指向$oem$文件夹所在的位置。
  ⑵ 必须将所有要用到的文件复制到本地硬盘上。
  ⑶ 如果cmdlines.txt包含的命令修改或创建了注册表设置,这部分设置将作为默认用户的设置写入,对所有新建的用户帐户都有效。
  ⑷ 不能用cmdlines.txt安装那些使用Windows Installer的软件(.msi软件包)。
  ■ GuiRunOnce
  如果要在目标系统重新启动后再运行命令、批命令文件或脚本,可以在sysprep.inf文件的GuiRunOnce小节设置。该小节中设置的命令将在用户第一次登录时运行,要注意的几点是:
  ⑴ 必须启用了Autologon才能让GuiRunOnce设置的命令生效,即必须在GuiUnattended小节设置AutoLogon=Yes。
  用引号括起每一个命令。
  ⑵ GuiRunOnce小节里面的命令在当前登录用户的安全上下文下运行,注意用户权限是否允许运行当前的命令。
  ⑶ 为保证所有的命令都被执行,必须禁止重新启动。如果某个用GuiRunOnce启动的程序提供了重新启动系统的选项(许多支持无人值守安装的软件都这样),你必须关闭重新启动。如果系统重新启动,GuiRunOnce里面后继的命令将不再被执行。
  ⑷ 如果要安装多个应用软件,用start命令和/wait参数启动安装程序,避免各个程序之间相互影响。
四、附录:自动创建sysprep.inf文件
  创建sysprep.inf文件最方便的途径是使用微软的Setup Manager(安装管理器)程序。对于Windows XP,你可以在XP CD-ROM的\Support\Tools目录的deploy.cab文件里找到它。
  将安装管理器的执行文件setupmgr.exe复制到硬盘,双击执行,向导将询问是否要创建一个新的应答文件,还是修改现有的应答文件。选择“创建新文件”,指定这将是一个用于Sysprep的文件(图二),选择将用新建的应答文件部署的平台(图三)。


根据实际需要,分别设定常规、网络、高级类选项(图四),最后点击“完成”,安装管理器将创建sysprep.inf文件并提示输入保存文件的位置。完成后,你可以用记事本打开sysprep.inf文件进行分析了。

  大多数较新的机器都需要操作系统安装盘本身没有提供的驱动程序。那么,如何让这类驱动程序也能自动安装呢?你必须把它们复制到硬盘上的某个位置,然后修改sysprep.inf指定这些位置(参见附录“自动创建Sysprep.inf文件”)。具体的操作步骤是:
  ㈠ 在系统驱动器的根目录下创建一个Sysprep目录,用来保存运行Sysprep必需的执行文件和sysprep.inf文件。
  ㈡ 在系统驱动器的根目录或Sysprep目录下创建一个Drivers目录——如果你要让目标机器运行好最小安装后能够使用这些驱动程序,则在根目录下创建Drivers文件夹;如果将驱动程序保存在Sysprep目录下的文件夹,最小安装过程将清除它们(最小安装是Windows常规安装过程的简化版,它只询问尚未在sysprep.inf中回答的问题)。
  ㈢ 在Drivers文件夹下,为不同的硬件设备创建相应的子目录保存驱动程序,将所有第三方驱动程序复制到相应的子目录。
  ㈣ 接下来还要设置一下sysprep.inf文件,以便最小安装过程能够找到驱动程序,如下面的例子所示。注意安装程序不会搜索OemPnPDriverPath路径的子目录,所以每一个目录都必须分别指定:
 
;SetupMgrTag
[Unattended]
OemSkipEula=Yes
OemPnPDriverPath=Sysprep\Drivers\NETWORK;Sysprep\Drivers\AUDIO;
Sysprep\Drivers\MODEM;Sysprep\Drivers\VIDEO;
二、挖掘sysprep.inf的潜力
  要让同一个映像适用于不同类型的硬件系统,最关键的是要设置好sysprep.inf文件的SysprepMassStorage小节。你可以手工在这个小节中加入大容量存储设备的驱动程序,使得具有不同磁盘控制器的系统能够共享映像;或者干脆一点,你可以让Sysprep自动填写该小节,加入操作系统带有的所有大容量存储设备。
  第二种办法的优点是一个映像文件可以支持大量的硬件设备——即使是创建映像时你还不可能想到的那些设备;其缺点是,在Sysprep处理期间引入所有的驱动程序需要额外耗费10到15分钟的时间,而且必须在目标系统上用-clean参数运行Sysprep。
  让Sysprep自动加入大容量存储设备的操作步骤是:
  ⑴ 首先确保sysprep.inf同时提供Sysprep和SysprepMassStorage小节。
  ⑵ 在Sysprep小节下面创建如下指令:BuildMassStorageSection=Yes。
  ⑶ 打开一个命令窗口,转到sysprep.exe所在的目录,执行命令sysprep -bmsd。Sysprep将构造出SysprepMassStorage小节的内容并结束。
  ⑷ 接着执行Sysprep -mini,完成最后的Sysprep操作。
  除了SysprepMassStorage小节之外,sysprep.inf还有其他许多配置项目值得好好利用。例如,UserData小节用来定义安装期间典型问题的答案,凡是最小安装期间希望手工输入的内容,保留空白即可。如果你想让映像既能够用于多处理器的系统,也能够用于单处理器的系统,可以在Unattended小节中设定UpdateHAL或UpdateUPHAL。Identification小节的作用是自动加入域或者工作组。
  最后,你可以用GuiUnattended小节的OEMDuplicatorString设置来辅助管理映像文件的修订,这个设置选项将把指定的字符串值加入到所有由该映像构造的系统;以后,当你要检查一下某台机器的操作系统是由哪一个映像构造时,可以检查注册键HKEY_LOCAL_MACHINE\SYSTEM\Setup\OemDuplicatorString确定原来的映像。
  三、自动执行操作
  为了提高安装过程的灵活性,你可以在安装期间或之后自动运行一些命令。如果要在最小安装结束后安装软件或运行程序、批命令文件、脚本,只要将相应的指令写入cmdlines.txt文件;如果要在目标系统重新启动后安装程序或运行命令,则必须将指令写入sysprep.inf文件的GuiRunOnce小节。
  ■ cmdlines.txt
  这个文件位于%SystemDrive%\Sysprep\i386\$oem$目录。下面是一个例子,它以-clean参数运行Sysprep,另外还执行Script1批命令、Program2程序:
[Commands]
"%SystemDrive%\Sysprep\Sysprep.exe -clean"
"FullPath\Script1.cmd"
"FullPath\Program2.exe -arg1"
  cmdlines.txt文件的格式很简单,不过要注意以下几点:
  ⑴ sysprep.inf文件Unattended小节必须声明InstallFilesPath,并且使其指向$oem$文件夹所在的位置。
  ⑵ 必须将所有要用到的文件复制到本地硬盘上。
  ⑶ 如果cmdlines.txt包含的命令修改或创建了注册表设置,这部分设置将作为默认用户的设置写入,对所有新建的用户帐户都有效。
  ⑷ 不能用cmdlines.txt安装那些使用Windows Installer的软件(.msi软件包)。
  ■ GuiRunOnce
  如果要在目标系统重新启动后再运行命令、批命令文件或脚本,可以在sysprep.inf文件的GuiRunOnce小节设置。该小节中设置的命令将在用户第一次登录时运行,要注意的几点是:
  ⑴ 必须启用了Autologon才能让GuiRunOnce设置的命令生效,即必须在GuiUnattended小节设置AutoLogon=Yes。
  用引号括起每一个命令。
  ⑵ GuiRunOnce小节里面的命令在当前登录用户的安全上下文下运行,注意用户权限是否允许运行当前的命令。
  ⑶ 为保证所有的命令都被执行,必须禁止重新启动。如果某个用GuiRunOnce启动的程序提供了重新启动系统的选项(许多支持无人值守安装的软件都这样),你必须关闭重新启动。如果系统重新启动,GuiRunOnce里面后继的命令将不再被执行。
  ⑷ 如果要安装多个应用软件,用start命令和/wait参数启动安装程序,避免各个程序之间相互影响。
 
我们一直在努力!
级别: *
发帖
*
飞翔币
*
威望
*
飞扬币
0
信誉值
0
只看该作者 1 发表于: 2006-05-31
图文并茂,很不错。
级别: 光盘中级
发帖
1019
飞翔币
746
威望
834
飞扬币
10249
信誉值
0

只看该作者 2 发表于: 2006-05-31
下回可以试试了。
级别: 光盘中级
发帖
1865
飞翔币
5
威望
249
飞扬币
1743
信誉值
0

只看该作者 3 发表于: 2006-06-06
呵呵 学习一下了~~~~~~
级别: *
发帖
*
飞翔币
*
威望
*
飞扬币
0
信誉值
0
只看该作者 4 发表于: 2006-06-07
谢谢,学习个..
级别: 光盘见习
发帖
22
飞翔币
335
威望
13
飞扬币
4888
信誉值
0
只看该作者 5 发表于: 2006-06-08
下回试试
级别: 光盘见习
发帖
22
飞翔币
335
威望
13
飞扬币
4888
信誉值
0
只看该作者 6 发表于: 2006-06-08
谢谢分享,能学到东西
xmy
级别: 光盘见习
发帖
46
飞翔币
135
威望
13
飞扬币
1614
信誉值
0
只看该作者 7 发表于: 2007-01-14
谢谢了,好东西,分享~
级别: 光盘新手
发帖
31
飞翔币
335
威望
28
飞扬币
1649
信誉值
0
只看该作者 8 发表于: 2007-02-15
谢谢提供分享,仔细看一下,学习中。
级别: 光盘初级
发帖
143
飞翔币
335
威望
63
飞扬币
1630
信誉值
0
只看该作者 9 发表于: 2007-02-19
可以试试了