制作ADM模板,自定义登陆画面:常常看到朋友们为了发布一个注册表的键值而不辞劳苦的写vbs,但vbs执行效率较低,而且不太规范,如果使用ADM模板就好多了。但常常又苦于手写ADM模板之苦,本文描述了使用Policy Template Editor (http://www./products/utilities/policytemplateeditor/ )制作ADM模板的过程,希望能够为朋友们带来一个稍微便捷一些的方法。 下图展示了编辑的主画面,在随后的描述中依次讲述它们的操作方法。这些方法制作出的模板适合于win2k sp4 ,winxp pro xp2 以及win2k3 sp1 GPMC的环境。
操作的过程,大多都在Policy 菜单上,从上至下执行。为了显示编辑项目,从而设定相关的参数,我们选择Edit菜单,单击 Properties…。这样就会弹出属性对话框,为了便于操作,请勾选 Keep on top 。
第一步:New Version。在其属性对话框上填写该策略应该使用的策略编辑器的版本。版本设置如下:
Operating System |
Version |
Type |
Windows XP SP2 |
5.0 |
Group Policy |
Windows Server 2003 and Windows XP |
4.0 |
Group Policy |
Windows Server 2000 |
3.0 |
Group Policy |
Windows NT® 3.x and 4.x |
2.0 |
System Policy |
Windows 95 |
1.0 |
System Policy |
(关于这个版本,有个很典型的错误。当使用winxp sp2的策略编辑器编辑了基于win2k ad的GPO后,再次使用win2k 的策略编辑器打开该GPO的时候,系统就会提示错误"The following entry in the [strings] section is too long and has been truncated" 。这是由于当使用winxp sp2下的策略编辑器后,它将会使用新的adm模板覆盖win2k中的模板,这导致新模板中的版本信息和相关的策略设定(特别是防火墙等),不能为win2k的策略编辑器所识别。这需要安装一个补丁,关于这个问题的描述见于http://support.microsoft.com/default.aspx?scid=kb;zh-cn;842933 ) 第二步:New Class。在菜单上选择是Machine or User,前者指定当前策略适用于计算机策略,后者则是用户策略。这里当然选择Machine计算机策略,因为这个策略应用的时候,用户还没有登陆呢。 第三步:New Category。 包括Category 以及 Policy中的各个项目,我们都可以使用变量带替换那些名称、键值等常量,引用变量名必须以两个感叹号开头。例如:!!winlogon 您也可以直接写那些名称、键值,而不使用变量,当然为了书写规范和以后的debug,还是建议您使用变量替换。 这里我就用它来替换新的Category的名称,如何做呢?请选择 Policy 菜单- String table… 然后点击 Add 按钮来添加变量,其中Search string就是变量名,这里就用winlogon好了(注意这里定义变量,不要用感叹号),Display string就是变量所代表的值,这里的名称叫“登陆选项”。这里所定义的变量表,在最终的ADM文件中就对应了[STRINGS]小节中所申明的部分(见于本文附录的ADM文件内容) 制作完毕后,体现在策略编辑器中的样子就如同下图。我将这个图放在这里,以便大家在后面的描述中可以对照相关项目的位置。
在“登陆选项”的属性窗口上,我们还能够看到一个设置项:Registry Key 这个设置项在其下的层次结构中是可以继承的,也就是说,如果在这里设置了Registry Key,那么在当前Category下所有的项目属性中,default registry key就使用此设置,从而简化了设置。这里我们设置为Software\Microsoft\Windows NT\CurrentVersion\Winlogon 因为随后的四个策略项都是在这个子键上。 第四步:New Policy。这里仅取其中一个项目“登陆banner”来说明制作的过程,其他类同。 ADM也就是说工具中所能定义的最终展现在策略编辑器的部分,就是上图中红框表示出来的两个部分,其他部分都是标准框架,是系统定义好了的,不用我们去参与。 1、定义新的策略项。 选择 Policy 菜单,选择 New Policy。然后选择出现的策略项,嗯,这个时候,工具暂时将它命名为 New,那么我们选择它,在其属性页上,General --- Policy name,我把它取名 !!GinaBannerBox 。奥,是引用变量了,那么我们选择 Policy 菜单- String table… 然后点击 Add 按钮来添加这个变量,其中Search string就添GinaBannerBox,Display string就要填这个策略的名字了,这里的名称叫“登陆Banner”。 奥,这里就可以看到了,Registry Key Use default,正好。下面的其他项目不要动。 再来,选择 Optional Windows2000 specifications 。我们为这个策略项作些说明,这里的说明最终表现在策略编辑器中,就是上图中“解说”页面中看到的。那么勾选 Explain,填入” 当您按下Ctrl+Alt+Del组合键后,出现在登陆窗口上的横幅图片。这里需要指定自定义GinaDll的文件位置,这个位置应该是计算机帐户在启动期间可以读取的位置,例如:fileserversharefoldermsgina.dll。请注意此共享文件夹的权限设置应至少为计算机帐户可读。”(不包含引号) 2、定义新的Part。 大家也看到了上面的解释,我必须在策略项的设置part中,为用户作一个例子,否则用户在填写自定义的MSgina文件路径的时候,会感觉有些麻烦。奥,就像在设置SUS模板的时候,填写SUS服务器的路径一样,得让用户知道模板所需要的格式。 那么,我选择 Policy 菜单,New Policy Part,Text。来在当前Part添加一行静态的文本。在其属性中 Text一栏填入sample: serversharefoldermsgina.dll 这里插入的Part的类型,也就关联了相应的注册表键值类型,对应的描述如下:
Type |
Description |
CHECKBOX |
Displays a check box. The value is set in the registry with the REG_DWORD type. The value is other than zero if the check box is selected and zero if it is not selected. |
COMBOBOX |
Displays a combo box. |
DROPDOWNLIST |
Displays a combo box with a drop-down list style. The user may choose only one of the entries supplied. |
LISTBOX |
Displays a list box with Add and Remove buttons. This is the only PART type that can be used to manage multiple values under one key. |
EDITTEXT |
Displays a text box that accepts alphanumeric text. The text is set in the registry with either the REG_SZ or the REG_EXPAND_SZ type. |
TEXT |
Displays a line of static text. There is no associated registry value with this PART type. |
NUMERIC |
Displays a text box with an optional spin control that accepts a numeric value. The value is set in the registry with the REG_DWORD type. |
好了,下面一行就应该让用户填写MSgina file的路径了,由于它的类型是字符串的,那么按照上面的表格中所述,这里插入Part 的类型就应该是 EDITTEXT。选择它的属性页。 Label一行只是用于在adm中描述这个Part的名字,与其他任何对象都无关系,这里就填入 Banner 好了。 勾选 Default value:应该填入一个该策略项的缺省值。就是当用户在策勒编辑器中点选“启用”该策略项的时候,系统立刻就会出现的缺省值。可以不必设置它,但用户每次填的时候就会感觉麻烦些。这里还是用变量 !!GinaDll,那么我需要选择 Policy 菜单- String table… 然后点击 Add 按钮来添加这个变量,其中Search string就添GinaDll,Display string就要填Gina file的路径了,这里为了实验的方便,就填“c:msgina1.dll”。当然这样设置的话,client在启动的时候,就会在当前计算机的C盘根目录寻找名为msgina1.dll的文件,用以替换系统MSGina文件。随后,我将编辑Ginadll文件,并将它放在client的C盘根目录,并命名为msgina1.dll Registry Key就使用 Use default好了。 Value name: 就是说在当前子键下应该创建什么键值呢?当然应该是GinaDll,那么最终写入client注册表的键值就是这样: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] "GinaDll"=" c:msgina1.dll" 3、编辑GinaDll File。 源文件位于 %systemrootsystem32msgina.dll 。很多的资源编辑工具都拥有修改文件资源的功能,比如resourcehack or exescope,用工具编辑其Bitmap资源,找到101和107,101 是个较小的位图,格式为 413*72,用于user login过程和锁定画面;107 是个较大的位图,格式为 413*88,用于登陆验证的画面。至于如何加工这个文件中的资源,就要看您的创意了 :)到这里,整个ADM模板制作过程就结束了,让我们在DC的GPMC中加载这个模板,套用计算机策略,然后在client得计算机上执行gpupdate /target:computer /force,随后注销,来看看策略应用后的效果:
ADM 模板文件: 如下,大家可以将它修改后保存为.adm文件,然后在策略编辑器中,计算机部分的管理模板中加载它。如果加载后,其下的策略项目不可见,请右键单击“系统管理模板”,选择“筛选”,取消勾选“只显示可以完全管理的策略”,点击确定。 ------------------------------------------- 不包含这一行 ---------------------------------- #if version >= 2 CLASS MACHINE CATEGORY "!!winlogon" KEYNAME "SoftwareMicrosoftWindows NTCurrentVersionWinlogon" POLICY "!!LogonPromptBox" #if VERSION >= 3 EXPLAIN "当您按下Ctrl+Alt+Del组合键后,出现在登陆窗口上的提示信息。" #endif PART "LogonPrompt" EDITTEXT VALUENAME "LogonPrompt" DEFAULT "!!LogonPrompt" END PART END POLICY ; !!LogonPromptBox POLICY "!!GinaBannerBox" #if VERSION >= 3 EXPLAIN "当您按下Ctrl+Alt+Del组合键后,出现在登陆窗口上的横幅图片。这里需要指定自定义GinaDll的文件位置,这个位置应该是计算机帐户在启动期间可以读取的位置,例如:fileserversharefoldermsgina.dll。请注意此共享文件夹的权限设置应至少为计算机帐户可读。" #endif PART "sample: serversharefoldermsgina.dll" TEXT END PART PART "Banner" EDITTEXT VALUENAME "GinaDll" DEFAULT "!!GinaDll" END PART END POLICY ; !!GinaBannerBox POLICY "!!DefaultDomainNameBox" #if VERSION >= 3 EXPLAIN "当您按下Ctrl+Alt+Del组合键后,出现在登陆对话框第三行“登录到”栏中,默认登陆网域。" #endif PART "DefaultLogonDomainName" EDITTEXT VALUENAME "DefaultDomainName" DEFAULT "!!DefaultDomainName" END PART END POLICY ; !!DefaultDomainNameBox POLICY "!!WelcomeTitleBox" #if VERSION >= 3 EXPLAIN "当您按下Ctrl+Alt+Del组合键后,显示在登陆窗口标题栏上的信息" #endif PART "WelcomeTitle" EDITTEXT VALUENAME "Welcome" DEFAULT "!!WelcomeTitle" END PART END POLICY ; !!WelcomeTitleBox END CATEGORY ; !!winlogon #endif [STRINGS] DefaultDomainName ="win2k3.com" GinaBannerBox ="登陆Banner" winlogon ="登陆选项" WelcomeTitleBox ="登录窗口标题" LogonPrompt =" Im Neo.Who are you?" DefaultDomainNameBox ="默认登陆网域" GinaDll ="c:msgina1.dll" WelcomeTitle ="for Matrix" LogonPromptBox ="登陆提示信息" ------------------------------------------- 不包含这一行 ----------------------------------
ADM文件的书写规则: 关于ADM文件的书写规则及相关关键字的使用,请参看 Group Policy ADM Files http://www.microsoft.com/downloads/details.aspx?FamilyID=92759d4b-7112-4b6c-ad4a-bbf3802a5c9b&displaylang=en#filelist Writing Custom ADM Files for System Policy Editor http://support.microsoft.com/default.aspx?scid=kb;en-us;225087 Implementing Registry-Based Group Policy http://www.microsoft.com/windows2000/techinfo/howitworks/management/rbppaper.asp 如何在 Windows 2000 中创建自定义管理模板http://support.microsoft.com/kb/323639/zh-cn
Gnaw0725 注:在使用Policy Template Editor的过程中,可能会感觉删除对象的时候,直接按del键,程序没有任何反应,此时可以选择Edit菜单中的Delete项。
|