Windows 管理

深入探讨 Windows Vista 中的新组策略模板

Darren Mar-Elia

 

概览:

  • 了解 ADMX
  • 编辑 ADMX 文件
  • ADM 和 ADMX 文件的区别
  • 创建中心库

在 Windows Vista 之前,可在组策略中设置的注册表值是由 ADM 文件控制的,该文件不但语法晦涩,而且属于专有性质。如果您希望控制 Microsoft 与标准 ADM 文件一同附带的注册表值之外的其他注册表值,则您需要学习此语法,

并创建自定义 ADM 文件。此外,这些 ADM 文件与每个组策略对象 (GPO) 一同存储在 Active Directory® 环境中,且每个 GPO 及其附带的 ADM 文件会被复制到域中的所有域控制器内。

随着 Windows Vista™ 的发布,Microsoft 在基于组策略的注册表模板方面有了很大的进步。Windows Vista 在 ADM 文件(现在称为 ADMX)的格式以及这些文件的存储方式方面做了重大更改。在本文中,我将深入介绍新的 ADMX 格式,并讨论这些文件与 ADM 的区别。我还将介绍如何在 Windows Vista 环境中存储这些文件。

ADMX 的不同之处

新的 ADMX 文件格式和自 Windows NT® 4.0 起便存在的旧 ADM 格式最大的区别在于,ADMX 采用了 XML 标准来描述注册表策略的设置。这种方式很好,有多个原因。首先,编辑 XML 的工具要远多于编辑 ADM 语法的工具。其次,由于 XML 是架构化的,因此最终会比较容易构建一些工具,来帮助您在正确位置放置正确的标记,进而创建结构良好的 ADMX 文件。其中架构化是指,对于给定的 XML 应用程序(如 ADMX 格式),有一个文档化的架构来描述可能用到的元素和属性以及它们的组织方式。本文后面的部分将对一个示例进行分析。

ADMX 和 ADM 的另一个主要区别在于,主 ADMX 文件的字符串部分分到了语言特定的 ADML 文件中。如果您熟悉 ADM 文件,就会知道每个文件的结尾会有一个以“[strings]”标记分隔的部分,其中您可以为字符串赋值,该字符串会在您使用组策略编辑器和管理模板时显示。例如,您单击给定策略的“解释”选项卡时所看到的文本,就存储在该字符串部分中。问题是,字符串存储在 ADM 文件中,如果您希望在其他语言的 Windows® 系统上使用该 ADM,则需要创建一个新的 ADM 文件,并加上适用于该语言的字符串部分。

如果 Windows 法语版本的用户想要编辑英语版 ADM 使用的现有 GPO,问题就更加复杂了。法语管理员在组策略编辑区中只能看到英语。为了解决这一问题,Windows Vista 将 [strings] 部分分成基于 XML 的 ADM 语言(或者 ADML)文件。ADML 文件能以任何支持的语言交付,并可被简单地更改为支持任何新语言,而不需更改存储策略的主 ADMX 文件。更重要的是,当该法语管理员从其 Windows Vista 工作站编辑 GPO 时,组策略编辑器将检测到正在使用 Windows 的法语版本,并会自动为该 GPO 加载法语 ADML 文件。

安装 Windows Vista 时所附带的所有 ADMX 和 ADML 文件,可以从 c:\windows\policydefinitions 文件夹中查看(请参阅图 1)。

图 1 Windows Vista 中的 ADMX 文件

图 1** Windows Vista 中的 ADMX 文件 **(单击该图像获得较大视图)

请注意,在图 1 列出的文件中,顶部有一个名为 en-us 的文件夹。这便是语言特定的文件夹,您在 PolicyDefinitions 文件夹中所看到的 ADMX 文件的 ADML 文件就存在这里面 - 在本例中为美国英语。每个 ADMX 文件都有一个 ADML 文件。在撰写本文时,Windows Vista 默认包含 132 个 ADMX/ADML 文件。这是 Windows Vista 较之以前版本的另一个明显的不同之处:Windows XP 创建的 GPO 通常具有五个 ADM 文件,最大的是 System.adm,该文件保存着策略控制的大部分 Windows 组件的策略项目。在 Windows Vista 中,Microsoft 决定根据功能将 ADMX 文件分开,因此会具有更多数量的 ADMX 文件。每个 ADMX 通常涉及单个 Windows 组件(如控制面板、DNS 客户端、Windows 资源管理器等)。

了解 ADMX

正如我前面所说,用 XML 编写 ADMX 是一大进步。但是,许多管理员不知道如何编写 XML,更不用说了解 ADMX 用于创建策略扩展的架构了。尽管有关自定义 ADMX 创建的教程超出了本文的范围,我们还是来了解一下 ADMX 是如何构成的。

您可以用任何文本编辑器(甚至是 Notepad)打开 ADMX 或 ADML 文件,但是,除非编辑者了解 XML 语法,否则意义不大。我使用 Visual Studio®,因为它的 IntelliSense® 功能可帮助您完成特殊的元素。图 2 显示了 Windows Vista 附带的其中一个 ADMX 的前几行。

Figure 2 ADMX 文件中的部分 XML

<?xml version="1.0" encoding="utf-8"?>
<policyDefinitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" revision="0.9" schemaVersion="0.9"
  xmlns="https://www.microsoft.com/GroupPolicy/PolicyDefinitions">
  <policyNamespaces>
    <target prefix="AxInstSv" namespace="Microsoft.Policies.ActiveXInstallService" />
    <using prefix="windows" namespace="Microsoft.Policies.Windows" />
  </policyNamespaces>

如果您不熟悉 XML,可能看不懂,但在任何 ADMX 文件中都可以找到这些 XML 元素。例如,policyNamespaces 元素可在所有 ADMX 文件领域内唯一标识此 ADMX 文件。

我们知道,在 Windows 的以前版本中创建自定义 ADM 文件,需要采用一组标记(如 Category、Policy、ListBox 和 ActionList)来定义策略设置,这些策略设置将出现在组策略编辑器中。这些标记大都保持原样,或者仅在 ADMX 格式上有略有变化,但是看起来却迥然不同,因为它们被表示为 XML。例如,我编写了一个自定义 ADM 文件用于组策略故障排除,该文件会在 Windows 中启用各种类型的日志记录。图 3 显示了该自定义 ADM 的一部分。我将此文件转为新的 ADMX 格式,如图 4 所示。

Figure 4 转换为 ADMX 文件的 ADM 文件

<policy name="Folder Redirection Logging" class="Machine" displayName="$(string.FolderRedirLogging)" explainText="$(string.FolderRedirLogging_Help)" key="Software\Microsoft\Windows NT\CurrentVersion\Diagnostics" valueName="FDeployDebugLevel">
      <parentCategory ref="PolicyLogging" />
      <supportedOn ref="windows:SUPPORTED_Win2K"/>
      <enabledValue>
        <decimal value="15"/>
      </enabledValue>
      <disabledValue>
        <decimal value="0" />
      </disabledValue>
    </policy>

Figure 3 自定义 ADM 文件

CLASS MACHINE
  CATEGORY !!System
    CATEGORY !!GroupPolicy
    CATEGORY !!Logging
POLICY !!FolderRedir
EXPLAIN !!FolderRedir_HELP
KEYNAME "Software\Microsoft\Windows NT\CurrentVersion\Diagnostics"
VALUENAME "FDeployDebugLevel"
VALUEON NUMERIC 15
VALUEOFF NUMERIC 0
END POLICY ;FolderRedir
      END CATEGORY ;Logging
   END CATEGORY ;GroupPolicy
 END CATEGORY ;SYSTEM

此段 ADMX 文件的很多方面都要比其相应的 ADM 文件更易于理解,因为它更加简洁。policy 元素指定了此策略的用途(文件夹重定向日志记录)。以“$(string.”为前缀的属性是对相应 ADML 字符串元素的引用。很显然,key 和 valuename 属性指定此策略可以修改的注册表项和值。parentCategory 元素控制此策略在组策略编辑器管理模板层次结构中出现的位置。supportedOn 元素指示此策略适用于哪个操作系统版本。最后,enabledvalue 和 disabledvalue 元素指定将此策略设置为启用和禁用时,在注册表中写入的值。

这是一个很简单的开/关策略。在 ADM 语法中,组策略编辑器可以创建更加复杂的 UI 元素。当您在 ADMX 中创建元素时,会更多地涉及到语法,且语法还包含一个表示属性,该属性引用了一部分包含 UI 元素文本标签的 ADML 文件。除此之外,ADMX 语法的确不是很复杂。请记住,ADM 和 ADMX 的一些标记名称有所不同。例如,ADM 有“edittext”和“listbox”标记。而在 ADMX 中,您会发现这些标记在 ADMX 文件中被称为“text”和“list”。在指定其伴随显示文本的 ADML 文件中,这些元素具有相应的条目。

正如您所知,管理员可将自定义(传统)ADM 文件加载到 Windows Vista 组策略对象编辑器中。人们经常问我,Microsoft 是否会提供实用工具,用于将自定义 ADM 文件转换为 ADMX 语法。实际上,Microsoft 与 FullArmor Corp. 合作发布了一个免费工具,称为 ADMX Migrator。此工具有两个用途。第一个用途,它可以将您原来的自定义 ADM 文件转换为 ADMX 格式(有关使用此工具转换我的自定义 gpolog.adm 的示例,请参阅图 5)。

图 5 ADMX Migrator

图 5** ADMX Migrator **(单击该图像获得较大视图)

第二个用途,它提供一个 ADMX 编辑器,您可以用它从头创建新的 ADMX 文件。可以从 go.microsoft.com/fwlink/?LinkID=77409 下载此工具。

ADMX 存储

我要讨论的另一个显著变化是如何存储 ADMX 和 ADML 文件以供使用的。在 Windows Vista 以前的 Windows 版本中,当您编辑新的 GPO 时,会自动将 ADM 文件从本地工作站(您执行编辑任务的位置)复制到 Active Directory 域中域控制器上的 GPO 的 SYSVOL 部分中。然后会将这些 ADM 复制到域中的每个 DC,供创建的每个 GPO 使用。这样会浪费大量网络带宽和磁盘存储空间,尤其在有几十个甚至数百个 GPO 的大型环境中。Windows Vista 从根本上改变了这一过程。默认情况下,当您从 Windows Vista 工作站创建基于 Active Directory 的 GPO 时,组策略编辑器中显示的管理模板策略是从 c:\windows\policydefinitions 文件夹加载的,该文件夹位于您正在编辑 GPO 的计算机上。

ADMX 和 ADML 文件不会复制到 SYSVOL - 它们仅用作本地引用之目的。这就消除了 ADM 为组策略环境带来的存储和网络负担。但是我们还能做得更好。Windows Vista 同时支持一个中心库,它是管理模板的存储库。这样一来,您就可以有效地控制用于编辑 GPO 的 ADMX 文件了,而无论是谁在编辑它们。方法是:将所有正式 ADMX 和 ADML 文件(以及您所创建的任何自定义文件)复制到网络位置,然后从 Windows Vista 工作站编辑的所有后继组策略均会引用这些基于网络的版本,而不是分别引用本地版本。建立中心库是一项简单的任务,且每个域只需执行一次。遵循“创建中心库”边栏中的步骤即可。

总结

相对于以前操作系统版本所使用的 ADM 文件,Windows Vista 新的 ADMX 格式有了明显的改进。XML 的使用,为编辑和搜索这些文件提供了更为清洁的框架。语言特定字符串向单独文件的转换,使得多语言组策略编辑能够无缝进行,同时,中心库消除了将所有 GPO 与 ADM 文件的副本一同存储并更新的必要性。所有这些使得了解 ADMX 成为明智之举。

创建中心库

创建中心库相对简单。请遵循以下简单步骤在您的 Active Directory 域中创建一个中心库:

步骤 1: 打开资源管理器,浏览至环境中 PDC 仿真器 DC 上的 SYSVOL 共享(您可以使用任何 DC,但是 PDC 角色所有者通常是组策略更改的关注焦点)。

步骤 2: 打开 SYSVOL 下的 Policies 文件夹,新建一个名为 PolicyDefinitions 的文件夹。

步骤 3: 将 Windows Vista 工作站上 C:\windows\policydefinitions 文件夹的内容复制到新的 PolicyDefinitions 文件夹中,其中 ADML 文件夹根据语言确定(例如,美国英语计算机上的 en-us)。

将 ADMX 和 ADML 文件复制到中心库文件夹后,Windows Vista 上的组策略对象编辑器将开始引用此处的文件并忽略本地存储的文件!

Darren Mar-Elia是 Microsoft 组策略 MVP,他创建了流行的组策略站点 - www.gpoguy.com,并且是《Microsoft Windows Group Policy Guide》(Microsoft Windows 组策略指南)(Microsoft Press,2005)的执笔者之一。他还是 SDM Software, Inc. 的 CTO 和创始人。您可以通过发送电子邮件到 Darren@gpoguy.com 与他联系。

© 2008 Microsoft Corporation 与 CMP Media, LLC.保留所有权利;不得对全文或部分内容进行复制.