 TechNet Magazine March 2008

TechNet Magazine March 2008

特别报导：Windows Server 2008: 深入了解 Windows Server 2008 内核变化

深入了解 Windows Server 2008 内核中提高可靠性、性能和可伸缩性的重要变化。了解 Windows Server 2008 如何更好地利用线程池、简化硬件故障恢复以及通过 Hyper-V 改进虚拟化功能等内容。

Mark Russinovich 特别报导：Windows Server 2008: Active Directory 域服务新增功能

Windows Server 2008 中引进了一些对 Active Directory 域服务的重大功能增强。让我们仔细研究只读域控制器和 Windows Server Core 如何改善您所在环境的安全性、服务器管理器和改进后的备份功能如何简化管理，以及新的审计工具如何确保合规性。

Gil Kirkpatrick 特别报导：Windows Server 2008: IIS 7.0 入门

IIS 7.0 具有许多新功能—一篇文章无法一一详述。IIS 6.0 具备以安全为重点的可靠设计，这也是新版本的构建基础，从而提供了显著改进平台可管理性和扩展性的增强功能。 概述 IIS 7.0 中一些最重要的变化。

Isaac Roybal 特别报导：Windows Server 2008: Windows Server 2008 中的策略驱动网络访问

您如何让那些需要访问网络的人员在确保安全的情况下访问网络？了解 Windows Server 2008 中的新技术（如带有高级安全性和网络访问保护的 Windows 防火墙）如何让您实施基于策略的方法以达成此目标。

Ian Hameroff and Amith Krishnan 特别报导：Windows Server 2008: 使用服务器管理器配置角色

DNS 服务器不必是打印服务器。Windows Server 2008 为改善安全性和易管理性而采取的一种方法是简化服务器角色，使您能够很容易地仅安装所需的工具和服务，而不安装其他内容。下面将介绍如何使用“服务器管理器”来配置角色及简化部署。

Byron Hynes 特别报导：Windows Server 2008: 使用 System Center 部署 Windows Server 2008

在过去，服务器管理员常常需要使用 CD 或 DVD 手动安装 Windows Server，然后再耗费数小时时间来配置服务器。随着 System Center Configuration Manager 2007 和新的 Microsoft 部署工具包的发布，服务器管理员现在终于可使用桌面管理员已使用多年的相同工具来自动化部署。

Tim Mintner 特别报导：Windows Server 2008: Windows Server 2008 中的审核和符合性

审核变更现在是 IT 部门的核心职责。在了解和管理分布式环境中的系统和数据时，它是不可或缺的一部分。本文将讨论常见的难题、符合性和规定的前景、一些基本审核以及如何才能创建一种全面的审核策略。

Rob Campbell and Joel Yoker 编辑寄语: Windows Server 2008 登场

Joshua Hoffman 读者来信: 读者心声

工具箱: 面向 IT 专业人员的新产品

Greg Steen 实用程序特别推荐: Windows Server 徽标认证

为帮助 ISV 和客户衡量应用程序兼容性，Microsoft 提出了“Works with Windows Server 2008”计划。该计划提供一些免费的支持测试工具，可帮助您确保应用程序提供可预测的体验。

Venkat Krishnamachari 网络专家: 使用 ISATAP 将您的 Intranet 迁移到 IPv6

是否准备好迁移到 IPv6？网络专家解释如何使用 IPv6 转换技术获得 IPv6 连接，并迁移至具有 IPv6 功能的 Intranet。

Joseph Davies Windows PowerShell: 进度报告

对于那些注意力能保持集中（甚至不能保持集中）的用户，在脚本中提供状态反馈是一个不错的想法。下面我就讲一讲如何在 Windows PowerShell 中提供状态信息。

Don Jones 您好，脚本专家！: 我们最喜爱的 Shell 比赛

脚本专家们将展示如何使用一些脚本和 Shell 对象来更改文件的上次修改日期。

The Microsoft Scripting Guys 安全观察: 在 Windows Server 2008 中使用 SCW

您已了解了 Windows Server 2008 中新推出的“服务器管理器”工具。但是您可能不清楚它同时还提供了“安全配置向导”(SCW)。了解为什么还要使用 SCW。

Jesper M. Johansson 桌面文件: 既不可过于丰富，也不可过于省略

尽管瘦客户端兴起一阵后又没落，但其实始终有些情形是适合采取这种形式的。目前，它们仍活跃于网亭和仅需 Web 浏览功能的环境中。下面我们来看一看如何通过重用旧硬件和客户端应用程序来节省资金。

Wes Miller 领域备注: 为 IT 2.0 做好准备

下面我们来看一看汲取过去的经验教训对于应对未来的 IT 挑战的重要性。

Romi Mahajan Windows 机密: Beta（测试版）如何成为 RC（候选发布版）

Raymond Chen 谈论了非最终版本的命名约定如何发生更改的有趣往事。同时，他还友善地劝告公司对试用版进行更严肃的测试。

Raymond Chen


 特别报导：Windows Server 2008: 深入了解 Windows Server 2008 内核变化
特别报导：Windows Server 2008 Mark Russinovich

深入了解 Windows Server 2008 内核变化
概览:
  • 内存管理和 SMB 2.0
  • NTFS 自修复功能、Windows 硬件错误报告体系和驱动程序验证程序
  • I/O 完成端口、线程池和 NUMA 的可伸缩性
  • Hyper-V 虚拟化

Windows Server 2008 是最新版本的 Microsoft 服务器平台，它包含许多系统级更改，这些更改涉及操作系统的所有功能领域：从内存管理
到线程调度，从网络连接到安全（这里只列出了少数几个）。
由于 Windows Server® 2008 和 Windows Vista® SP1 的内核相同，因此它包含许多我曾经在之前的《TechNet 杂志》文章：“深入了解 Windows Vista 内核”第 1-3 部分（2007 年 2 月、3 月和 4 月）和“深入了解 Windows Vista 用户帐户控制”（2007 年 6 月）中介绍过的增强功能。只有其中的少数功能仅特定于客户端且并未包含在 Windows Server 2008 中，如 SuperFetch、ReadyBoost、ReadyDrive、ReadyBoot 和多媒体类计划程序服务 (MMCSS)。
因此，我将不再重复介绍 Windows Vista 中已介绍过且 Windows Server 2008 中同样包含的重要内核变化，如 I/O 优先级排列、新的引导体系结构 BitLockerTM、代码完整性和强制完整性级别。我将重点介绍之前这些文章中未涉及到的关键变化，包括与可靠性、性能、可伸缩性以及新的 Microsoft 管理程序计算机虚拟化技术 Hyper-VTM 相关的变化。
同样，与之前的文章一样，本文的范围仅限于操作系统内核 Ntoskrnl.exe 以及与其紧密关联的系统组件的变化。例如，本文不会介绍安装（WIM 或 Windows® 映像格式和基于组件的服务）、管理（组策略和 Active Directory® 改进）、常规诊断和监控（Windows 诊断基础结构）、核心网络（新的防火墙和 TCP/IP 实现）、Server Core 或服务器角色的变化。
用于多处理器系统
系统的其中一项底层变化是 Windows Server 2008 仅提供设计用于多处理器系统的内核版本。过去，Windows 拥有专门针对单 CPU 计算机上的单处理器的版本，因为该版本可通过忽略仅在多处理器环境下需要的同步代码来获得稍好一点的性能。随着硬件速度变得越来越快，由优化带来的性能提高几乎可忽略不计，并且如今的大多数服务器系统都包含多个处理器，所以已不再需要单处理器的内核版本。
图 1 显示了 Windows Server 2008 内核的各个版本，系统中具体使用哪个版本取决于操作系统是调试版本（Checked 版本）还是零售版本、安装为 32 位还是 64 位（Itanium、Intel 64 或 AMD64），以及如果是 32 位安装，系统的物理内存是否超过 4GB 或支持数据执行保护 (DEP)。Windows Server 2008 还可能是最后一个提供 32 位版本的 Windows Server 操作系统。
Figure 1 Windows Server 2008 内核版本 (Close Figure 1)

内核 | 32 位 | 64 位
多处理器 | 是 | 是
多处理器 Checked 版本 | 是 | 是
多处理器物理地址扩展 (PAE) | 是 | 否
多处理器 PAE Checked 版本 | 是 | 否
Windows Server 的每个版本均注重改善服务器主要应用场合（如文件服务、网络 I/O 和内存管理）的性能。此外，Windows Server 2008 还包含许多变化和新功能，以使 Windows 能更好地利用新的硬件体系结构，适应高延迟网络并消除之前的 Windows 版本中限制性能的瓶颈。本部分将回顾内存管理器、I/O 系统方面的增强功能，并介绍新的网络文件系统 SMB 2.0。

内存管理
试验：查看大规模的磁盘 I/O 操作
可使用 TechNet Sysinternals Process Monitor (technet.microsoft.com/sysinternals/bb896645.aspx) 之类的文件系统监视工具来查看 Windows Server 2008 系统上的大规模文件 I/O 操作。
有多种方法均可产生大规模 I/O 操作。如果有另一个运行 Windows Vista Service Pack 1 或 Windows Server 2008 的系统，可在头一个服务器上运行 Process Monitor 并监控到第二个系统的文件复制。还可以通过运行非常耗费内存的程序使得内存管理器将页面写出到分页文件中，从而产生大规模的分页文件 I/O 操作。
图 A 显示了在 Windows XP 系统中运行非常耗费内存的程序后 Process Monitor 的输出，此时在 Process Monitor 的“Options”（选项）菜单中选中了“Enable Advanced Output”（启用高级输出）选项，并将过滤器设置为仅显示到分页文件 pagefile.sys 的写入。“Detail”（详细信息）列显示写入大小为 64KB。
图 A
如果在 Windows Server 2008 上运行相同的步骤，则很可能出现类似图 B 中显示的输出，它显示大多数写入大小约为 1MB。
图 B

Windows Server 2008 中的内存管理器包含多项性能增强功能。例如，与 Windows Server 2003 相比，从分页文件提取数据或对映射文件执行预读 I/O 时，它将使用数量更少但规模更大的磁盘 I/O。I/O 系统中的变化是促成更大规模的文件 I/O 的前提，它去除了自 Windows NT® 的第一个版本以来一直存在的 64KB 的 I/O 大小限制。
并且，必须注意：与 Windows Server 2003 相比，使用 Windows Server 2008 时，Cache Manager 从映射文件进行预读（猜测性读取）的数据读取通常要大两倍，并且将直接进入待机列表（系统的代码和数据缓存）。这种行为取代了 Cache Manager 映射虚拟内存并将数据读入系统工作集（由内存管理器为系统分配的内存）的需要，而这种需要可能导致其他使用中的代码或数据被不必要地驱出工作集。
当把数据写入分页文件时，内存管理器也会执行更大规模的 I/O。尽管 Windows Server 2003 常常执行比 64KB 还小的写入操作，但在 Windows Server 2008 中，内存管理器通常使用 1MB 的写入操作。
除通过减少写入分页文件的次数来提高性能外，较大规模的写入操作还可减少分页文件中的碎片。而它又反过来减少了读回多个页面所需的读取次数和磁盘寻道次数，因为如果不相邻，读取和寻道次数都会多得多。
内存管理器还会尝试写出其他已修改页面（这些页面与将要写出到所拥有进程的地址空间中的页面相邻），并且会将分页文件放到已包含其他相邻页面的区域中。这种方法也可尽量减少碎片并提高性能，因为那些可能会最终写出到分页文件中的页面均已被写入。此外，它还减少了引入大量相邻进程页面所需的分页读取次数。查看侧栏“试验：查看大规模的磁盘 I/O 操作”了解有关内存管理器使用大规模的 I/O 方面的更多信息。

SMB 2.0
自从文件服务功能被引入到 Windows 中以来，服务器消息块 (SMB) 远程文件系统协议（也称为通用 Internet 文件系统 (CIFS)）就已成为 Windows 文件服务的基础。在过去的几年中，SMB 的设计限制制约了 Windows 文件服务的性能和利用新的本地文件系统功能的能力。例如，单个消息能传输的最大缓冲区大小为约 60KB，并且 SMB 1.0 无法识别 Windows Vista 和 Windows Server 2008 中新增的 NTFS 客户端符号链接。
Windows Vista 和 Windows Server 2008 引入了 SMB 2.0，它是客户端和服务器都支持时 Windows 所使用的一种新型远程文件服务协议。除能正确处理客户端符号链接和其他 NTFS 增强功能外，SMB 2.0 还使用批处理来最小化客户端和服务器之间的信息交换数量。批处理可提高广域网 (WAN) 之类高延迟网络的吞吐量，因为它允许同时传输更多数据。
SMB 1.0 针对单个文件按顺序执行 I/O，而 SMB 2.0 则实现了 I/O 管道，从而可针对同一文件执行多个并发 I/O。它通过衡量客户端用于未完成 I/O 的服务器内存数量来决定管道的深度。
由于 Windows I/O 内存管理器和 I/O 系统以及 TCP/IP 接收窗口自动调节方面的变化和文件复制引擎的改进，SMB 2.0 显著提高了吞吐量并减少了大型传输的文件复制时间。由于两种操作系统都实现了 SMB 2.0，所以部署 Windows Server 2008 文件服务器和 Windows Vista 客户端即可使用 SMB 2.0 并实现这些性能优点。

使用 NTFS 自修复功能提高可靠性
可靠性是一个关键服务器属性，Windows Server 2008 提供各种改进来帮助管理员顺畅运行其服务器（包括在线 NTFS 一致性修复、新的硬件错误报告体系以及对驱动程序验证程序的扩展）。
由于现在使用的存储设备一般都以 TB 为单位，因此对某个卷进行脱机一致性检查可能会使服务中断数小时。鉴于许多磁盘损坏都局限于单个文件或部分元数据，Windows Server 2008 实现了新的 NTFS 自修复功能，即可在卷保持联机的情况下修复损坏。
当 NTFS 检测到损坏时，它将阻止访问受损的文件并创建一个系统工作线程，该线程将对受损数据结构执行类似 Chkdsk 的修复，完成后再允许访问修复后的文件。在此操作期间仍然可以正常访问其他文件，因而最小化服务中断。

WHEA 基础结构
Windows Server 2008 中包含有 Windows 硬件错误报告体系 (WHEA) 基础结构，它可以简化硬件故障管理并主动响应非致命错误。服务器通常都有严格的正常工作时间保证，因此及时确定并响应此类系统中的错误至关重要。
通过对利用在线崩溃分析 (OCA) 提交到 Microsoft 的崩溃进行分析表明：约 10% 的操作系统崩溃是源于硬件故障，但确定此类崩溃的根本原因却非常困难甚至于不可能，因为崩溃时所获取的硬件错误信息非常少。此外，在 Windows Server 2008 之前，Windows 并不内置支持监控设备的运行状况，也未实现故障前的修复或通知。其原因在于硬件设备并未使用一种通用的错误格式并且不支持错误管理软件。
WHEA 为各种平台设备（包括处理器、内存、缓存和类似 PCI 和 PCI Express 之类的总线）提供了统一的错误源发现和报告机制。其原理是实现图 2 中所示的体系结构，其中核心是错误源调用来报告错误的内核 API。此 API 要求所有错误都以同一方法进行格式化，然后使用 Windows 事件跟踪 (ETW) 事件来记录错误（严重错误则在重启后再记录）。
图 2 WHEA 错误报告基础结构
图 2 WHEA 错误报告基础结构
ETW 早在 Windows 2000 中就已引入，而当 ETW 使用 WHEA 后，硬件制造商和软件供应商就可轻松地开发利用 WHEA 事件的设备诊断管理应用程序。如果某事件已严重到足以导致系统崩溃，WHEA 会确保将该致命错误记录存储到崩溃转储文件中，这样管理员就可确定崩溃的根本原因。
WHEA 的另一关键部分是位于 %Systemroot%\System32\Pshed.dll 中的平台特定的硬件错误驱动程序 (PSHED)。内核与 PSHED 链接，而它与平台和固件硬件连接，实质上是用作错误通知和 WHEA 错误报告 API 之间的转换层。Microsoft 为每种平台体系结构（x86、x64、Itanium）提供有一种 PSHED 并且 PSHED 公开了插件模型，所以硬件供应商和制造商可使用特定于其平台的行为来覆盖默认行为。
最后，与其他错误源相连的系统组件 — 包括设备驱动程序、硬件抽象层 (HAL) 和内核 — 可实现底层硬件错误处理程序 (LLHEL)（它将首先处理错误状况）。LLHEL 的工作是从设备中提取错误信息，通知 PSHED 允许其收集其他平台错误信息，然后调用内核的 WHEA 错误报告 API。

驱动程序验证程序
从 Windows 2000 起，每个 Windows 副本中都包含有驱动程序验证程序，它是一个用于跟踪出错的设备驱动程序和故障硬件的强大工具。管理员通常将驱动程序验证程序(%Systemroot%\System32\Verifier.exe) 配置为密切监控可能导致系统崩溃的可疑设备驱动程序的行为。驱动程序验证程序可捕获非法驱动程序操作，这样崩溃转储文件就可以直接指出罪魁祸首。
之前驱动程序验证程序的缺陷在于大多数配置更改都需要重新启动系统，而生产服务器明显不愿出现这种情形。Windows Server 2008 中的驱动程序验证程序通过取消最有用验证的重启要求而改进了这一过程，因此可在不重新启动系统的情况下对出现问题的服务器进行故障排除。
此外，驱动程序验证程序还引入了三种新的验证（如图 3 所示）。安全检查确保设备驱动程序在用于与应用程序连接的对象上设置了安全权限。强制挂起 I/O 请求测试了驱动程序对于需立即完成而非一段延迟后再完成的异步 I/O 操作的恢复能力。杂项检查则确认驱动程序有无错误释放使用中的资源、错误使用 Windows 管理规范 (WMI) 注册 API 以及泄漏资源处理程序。
图 3 选中 Windows Server 2008 选项的驱动程序验证程序
图 3 选中 Windows Server 2008 选项的驱动程序验证程序

可伸缩性
可伸缩性是指操作系统或应用程序有效利用多个处理器和大量内存的能力。Windows 的每个版本都会通过减少或取消使用锁（它们会降低多处理器的平行性）来提高可伸缩性，Windows Server 2008 也不例外。
执行计时器超时的代码中有一个较小但却非常重要的改进，即不再需要调度程序锁（所有底层同步操作都会使用的一种系统范围调度程序锁）。从而降低了 CPU 同步开销，使得 Windows Server 2008 终端服务器系统能比 Windows Server 2003 多支持约 30% 的并发用户。
Windows Server 2008 中的其他可伸缩性改进包括完成端口增强功能、新的线程池实现、更加有效地使用非一致内存访问 (NUMA) 硬件以及动态系统分区。

改进了 I/O 完成端口处理
大多数可伸缩的 Windows 服务器应用程序（包括 IIS、SQL Server® 和 Exchange Server）都依靠称为完成端口的一个 Windows 同步 API 来最大程度减少执行 I/O 操作时在多个线程之间的切换。具体方法是首先将新到请求（如 Web 服务器客户端连接）通知与完成端口关联起来，并指定一个线程池来专门等待通知。当请求到来时，Windows 将调度一个线程，该线程通常执行其他 I/O 操作（如从磁盘读取一个网页并将其发送到客户端）来完成该请求。
因此，相同线程可尽快地返回以等待更多的客户端请求，线程异步执行 I/O 并将 I/O 完成与完成端口关联起来。线程随后返回等待完成端口，当新请求到来或某个 I/O 完成时，完成端口将调度该线程。通过这种方式，同一线程在 CPU 上始终处于活动状态：处理客户端请求或等待完成端口。
之前 Windows 版本中完成端口的缺陷在于：当 I/O 完成后，I/O 系统将让执行该 I/O 的线程立即执行一小段完成处理，而不考虑该线程当前正在执行的其他工作。如果还有其他线程处于活动状态，则常常会导致调度程序抢占活动线程，并上下文切换到另一个执行线程的情况。
通过将完成处理延迟到下一线程以等待与该 I/O 关联的完成端口，Windows Server 2008 避免了此类上下文切换。因此，即使还有另一线程正在等待完成端口，它仍会在执行其他代码之前先执行完成处理，而且调度程序不必切换到执行线程。这种最小化上下文切换的能力可显著地改善高负载服务器应用程序的可伸缩性。

线程池更加有效
利用多个 CPU 来写入应用程序非常困难，因此 Windows XP 引入了工作线程池，它是一种基础结构和相关 API，用于提取在多个 CPU 间执行小段工作的详细信息。 应用程序将工作项目指定给线程池 API，然后该 API 在它为系统中的每个 CPU 创建和管理的某个线程中执行这些工作项目。
线程池的目的是通过使用相同的线程连续执行多个工作项目来尽可能减少上下文切换。当某个线程因为忙于执行其他工作而无法达到此目的时，它将使用不同 CPU 上的另一线程来执行该工作项目。
Windows Server 2008 的线程池实现可间接地（受益于完成端口改进）和直接地（通过优化线程管理）更好利用 CPU，这样工作线程就能根据需要动态切换以便处理应用程序的负荷。并且，此基础结构的核心已转移到内核模式，从而最小化使用该 API 的应用程序所产生的系统调用数量。最后，新 API 使应用程序能够更轻松地执行某些操作，如在应用程序关闭期间中止已排队的工作单元。

NUMA 优化
Windows Server 2003 在线程调度程序和内存管理器中引入了 NUMA 优化，而 Windows Server 2008 在 I/O 管理器中添加了 NUMA 优化同时扩展了内存管理器的 NUMA 优化。
NUMA 系统通常是多处理器系统，其中的内存延迟随访问它的处理器不同而有所不同（请参见图 4）。内存被分成多个节点，CPU 和节点之间的延迟可能各不相同，并且每个 CPU 都被视为它可最快访问的那个节点的一部分。
图 4 示例 NUMA 系统
图 4 示例 NUMA 系统
NUMA 系统（尤其是具有超过八个 CPU 的系统）通常比一致内存访问系统更加经济且性能更高。一致内存访问系统必须平等地为所有 CPU 提供内存，而 NUMA 系统则能够为直接连接到 CPU 的内存提供高速互连，同时为与 CPU 相隔较远的内存提供较为便宜但更高延迟的连接。
为能在 NUMA 系统中有效扩展，操作系统或应用程序必须了解节点拓扑结构，以便使计算能够在包含计算数据和代码的内存附近执行。例如，Windows 调度程序为每个线程分配一个所谓的理想处理器，该处理器是调度程序试图始终在其上执行该线程的 CPU。这样做可以使线程置于 CPU 缓存中的数据能够尽可能地在每次该线程运行时可用。
在 Windows Server 2003 中，调度程序扩展此概念的方法是：将包含理想处理器的节点视为该线程的理想节点，并且当理想处理器正忙于执行另一个线程时，调度程序会尝试在理想节点中的另一个 CPU 上调度该线程。Windows Server 2003 内存管理器也支持 NUMA，并且在可能的情况下，它会将线程的内存分配定向到正在执行此线程的节点的内存中。
在 Windows Server 2008 中，内存管理器将内核的非分页内存缓冲区（内核和设备驱动程序用于存储必需保存在 RAM 中的数据的内存）分到各个节点，这样可以在产生分配的节点上为线程分配内存。系统页表项 (PTE) 是从发生分配的节点中分配，如果需要新页表页来满足内存分配，则会按照在 Windows Server 2003 中所采取的方式在相同的节点内存中分配，而不会从任何其他节点的内存中分配。
在 Windows Server 2003 中，当线程进行内存分配时，内存管理器在分配内存时将优先考虑在线程当前执行的节点中进行分配。如果线程暂时调度到非理想节点，则在此期间执行的所有分配操作都将在非理想节点中执行。所以，当线程最终回到其理想节点中执行时，它将不再像最初一样紧挨着所分配内存中存储的数据或代码。
为解决这一问题，在 Windows Server 2008 中，内存管理器在所有线程内存分配时都将优先考虑线程的理想节点，即使线程正在另一节点附近执行。内存管理器还能自动了解处理器和节点之间的延迟，所以当理想节点中没有足够的可用内存时，它会检查与理想节点最近的另一节点。此外，当线程引用代码或数据时，内存管理器将把其待机列表中的页面迁移到线程的理想节点。
希望控制分配位置的应用程序可使用新的 NUMA 内存 API，它使这些应用程序能够为内存分配、文件映射视图和文件映射对象指定首选节点。对于与文件映射相关的分配，内存管理器会检查映射操作是否指定节点，然后检查文件映射对象是否指定节点，如果两者都未指定，则最后它将回来继续选用线程的理想节点。
在 Windows Server 2008 之前，用于存储或网络 I/O 的中断及其相关的延缓进程调用 (DPC) 能够在任意 CPU 上执行，包括在与启动 I/O 操作处于不同节点的 CPU 上执行。这有可能导致 I/O 操作中的数据读取或写入在访问数据的节点以外的其他节点的内存中执行。
为避免这种情况，Windows Server 2008 I/O 系统将 DPC 执行定向到启动 I/O 操作的节点中的 CPU，并且拥有支持 PCI 总线 MSI-X（消息信号中断标准的扩展）设备的系统还可以通过使用设备驱动程序来进一步让 I/O 在本地完成，因为这些设备驱动程序将利用 Windows Server 2008 API 将 I/O 中断定向到启动该 I/O 的处理器。

动态分区
让系统更具伸缩性的一种方法是让其支持动态增加硬件资源（如 CPU 和内存）。如果这些资源无需重启系统即可实现更换，则此支持还能使系统更具可用性。
Windows Server 2003 支持动态内存添加功能，从而使得具有动态内存支持的服务器能在管理员添加的同时即可使用这些 RAM。Windows Server 2008 还扩展了动态内存支持，因为它可实现内存更换。
RAM 由于越来越依赖纠错码 (ECC) 校正而非常容易发生故障，因此在支持动态更换的服务器上，Windows Server 2008 可透明地将出现故障的内存条中的数据迁移到替换内存上。具体过程为：首先迁移操作系统所控制的数据，然后将硬件设备置于低功耗状态来有效关闭它们，迁移内存中的剩余数据，接着恢复设备电源继续正常操作。
Windows Server 2008 还支持处理器的动态添加和动态更换。对于动态更换，硬件必须支持备用 CPU 概念，当现有 CPU 产生故障指示时，备用 CPU 可联机或动态添加到系统中，目前仅高端系统支持此概念。Windows Server 2008 调度程序可减缓故障 CPU 上活动的速度，并将工作转移至替换硬件上，随后可取出故障 CPU 并将其更换为新的备用件。
Windows Server 2008 支持处理器的动态添加，因此管理员能在不停机的情况下升级服务器的处理能力。但是，调度程序和 I/O 系统只能将新 CPU 提供给那些通过新 API 请求 CPU 到达通知的设备驱动程序和应用程序，因为某些应用程序内置假定 CPU 数量对于引导会话而言是固定的。例如，应用程序可能为每个 CPU 分配一个工作队列，线程执行时将使用与该 CPU 关联的队列。如果调度程序将该应用程序的某个线程调度到新的 CPU 上，它可能会试图引用并不存在的队列，因而可能导致损坏应用程序的数据并很有可能致使该应用程序崩溃。
基于 Microsoft 服务器的应用程序（如 SQL Server 和 Exchange Server）能支持 CPU 动态添加，一些核心 Windows 进程也支持此功能，包括 System 进程、会话管理器进程 (%SystemRoot%\System32\Smss.exe) 和 Generic Service Hosting 进程 (%Systemroot%\System32\Svchost.exe)。其他进程也可使用 Windows API 来请求新 CPU 到达通知。当新 CPU 到达时，Windows 将向设备驱动程序通知这一情况、启动 CPU 并随后通知所写入的设备驱动程序和应用程序使用新的 CPU，这样它们就可以在需要时分配数据结构以跟踪新 CPU 上的活动。

计算机虚拟化
在 Windows Server 2008 之前，Microsoft 就已经使用宿主虚拟化技术（如图 5 所示）实现了包括 Virtual Server 2005 在内的各种虚拟化产品。在宿主虚拟化中，虚拟机的实现技术是在宿主操作系统上（通常是作为设备驱动程序）运行的虚拟机监控器 (VMM)。VMM 依赖宿主操作系统的资源管理和设备驱动程序，并且当宿主操作系统调度其运行时，它会在活动虚拟机 (VM) 之间对 CPU 切分时间片。
图 5 宿主计算机虚拟化
图 5 宿主计算机虚拟化
Hyper-V（以前的代号为“Viridian”）是利用管理程序虚拟化得以实现的。管理程序完全控制着所有硬件资源，甚至引导系统和用于控制 VM 的 Windows Server 2008 操作系统本身实质上也是以虚拟机的方式运行（如图 6 所示）。
图 6 Hyper-V 体系结构
图 6 Hyper-V 体系结构
管理程序可将系统分成多个 VM，并将 Windows Server 2008 的引导实例当作主分区（或根分区），以使其可直接访问各种硬件设备（如磁盘、网络适配器和图形处理器）。管理程序要求根分区执行电源管理并响应硬件即插即用事件。它将截取子分区中启动的硬件设备 I/O 并将其路由到根分区，然后根分区使用标准 Windows Server 2008 设备驱动程序来执行硬件访问。通过这种方式，运行 Hyper-V 的服务器可以充分利用 Windows 对硬件设备的支持。
当将 Windows Server 2008 配置为具有 Hyper-V 服务器角色时，Windows 将把 hypervisorimagelaunchtypeboot 引导配置数据库 (BCD) 设置设为 auto，并将 Hvboot.sys 设备驱动程序配置为在引导过程的前期启动。如果配置了该选项，Hvboot.sys 将使系统做好虚拟化准备，然后将 %Systemroot%\System32\Hvax64.exe 或 %Systemroot%\System32\Hvix64.exe 加载到内存中，具体加载哪个程序取决于系统是实现 AMD-V 虚拟化扩展还是 Intel VT CPU 虚拟化扩展。
加载完成后，管理程序使用虚拟化扩展将自身插入到 Windows Server 2008 中。用户模式的应用程序使用 x64 处理器的 Ring 3 权限级别，而内核模式代码则在 Ring 0 上运行，因此管理程序实际是在概念权限级别 Ring -1 上运行，因为它可控制 Ring 0 上运行的代码的执行环境。
当使用 Hyper-V 管理控制台创建或启动子分区时，它将利用 %Systemroot%\System32\Drivers\Winhv.sys 驱动程序来与管理程序通信，该驱动程序使用公开记录的 hypercall API 来指示管理程序创建指定物理内存大小的新分区和执行特征。根分区中的 VM 服务 (%Systemroot%\System32\Vmms.exe) 为每个子分区创建一个 VM 工作进程 (%Systemroot%\System32\Vmwp.exe) 以管理子分区的状态。
Windows 改善子 VM 操作系统性能的其中一种方法是 Windows Server 2008 和 Windows Vista 都已实现的启发方法（即仅当操作系统运行实现 Microsoft hypercall API 的管理程序时才会激活的代码序列）。通过直接请求管理程序的服务，子 VM 避免了在管理程序必须猜测子操作系统的意图时所产生的虚拟代码开销。
例如，未实现自旋锁（执行底层多处理器同步）启发方法的来宾操作系统将停在一个紧凑循环上旋转以等待其他虚拟处理器释放自旋锁。此旋转可能会阻塞其中一个硬件 CPU，直到管理程序调度第二个虚拟处理器。在启发式操作系统中，自旋锁代码会在将要发生旋转时通过 hypercall 通知管理程序，这样管理程序可以立即调度另一个虚拟处理器并降低不必要的 CPU 使用。
Windows Server 2008 改善 VM 性能的另一种方式是加速 VM 对设备的访问。可通过在子操作系统中安装统称为“VM 集成组件”的一个组件集合来增强性能。
如果运行未安装集成组件的 VM，则子操作系统将为管理程序所提供的模拟设备配置硬件设备驱动程序。当设备驱动程序试图使用硬件资源时，管理程序必须进行干预以便通知根分区，根分区将代表子 VM 操作系统使用标准 Windows 设备驱动程序执行设备 I/O。由于单独的高级 I/O 操作（例如读磁盘）可能包含多个离散的硬件访问，所以它可能导致管理程序和根分区中出现许多称为“截取”的转换。
Windows Server 2008 使用以下三种组件来最小化截取：虚拟机总线驱动程序 (%Systemroot%\System32\Drivers\Vmbus.sys)、虚拟服务客户端 (VSC) 和虚拟服务提供商 (VSP)。当利用受支持操作系统将集成组件安装到 VM 中时，VSC 将取代设备驱动程序的角色，并使用子 VM 中的 Vmbus.sys 驱动程序服务，通过管理程序的 hypercall 和内存共享服务将高级 I/O 请求发送到根分区中的虚拟机总线驱动程序。在根分区中，Vmbus.sys 将请求转发到相应的 VSP，然后它通过根分区的设备驱动程序来启动标准 Windows I/O 请求。
如您所看到的那样，通过引入 Hyper-V 这种基于管理程序的虚拟化技术，Windows Server 2008 在 Microsoft 计算机虚拟化策略中扮演着非常关键的角色。您可以在计划于本年晚些时候发行的下一版《Windows Internals》中了解有关这些功能和其他功能的详细信息。

Mark Russinovich 是 Microsoft 平台和服务部门的一名技术人员。他是《Microsoft Windows Internals》(Microsoft Press, 2004) 的合著者之一，并经常在 IT 和开发人员会议上演讲，包括 Microsoft TechEd（微软技术大会）和 微软程序员大会。在 Microsoft 收购了 Mark 与其他人创办的 Winternals Software 之后，他也随之加入了 Microsoft。他还创建了 Sysinternals，在这里他发布了许多流行的实用工具，包括 Process Explorer、Filemon 和 Regmon。
© 2007 Microsoft Corporation 与 CMP Media, LLC.保留所有权利；不得对全文或部分内容进行复制.


 特别报导：Windows Server 2008: Active Directory 域服务新增功能
特别报导：Windows Server 2008 Gil Kirkpatrick

Active Directory 域服务新增功能
概览:
  • 将新的服务管理器与 ADDS 结合使用
  • 在 Server Core 上运行域服务
  • 只读域控制器
  • 更改密码、备份和审计

Microsoft 通过 Windows 2000 向世人展示了 Active Directory。接下来，在 Windows Server 2003 这一重要版本中，Active Directory 得到了极大的改进，但未做任何
重大更改。如今，Active Directory® 已成为功能强大且极其成熟的目录服务。尽管如此，Active Directory 团队仍通过不懈的努力在最新版本中继续完善其功能，以提高这一核心网络服务的安全性和可管理性。
在世纪之交，Active Directory 主要是验证登录的用户、对用户和计算机应用组策略并协助其找到所需的打印机。仅仅几年后，Microsoft 又发布了一个独立的改良版，称为 Active Directory 应用程序模式 (ADAM)。
到了 2006，一切都焕然一新。Active Directory 不再是一种特定的技术。现在，它已成为一种品牌名称，代表一系列 Windows® 身份和访问控制服务。图 1 为您展示了 Active Directory 品牌组成内容的纲要。
Figure 1 Active Directory 组件 (Close Figure 1)

当前 Active Directory 技术 | 先前称谓 | 说明
Active Directory 域服务 (ADDS) | Active Directory | 我们习惯称为 Active Directory。它为域用户和计算机提供 Kerberos 和基于 NTLM 的验证，并管理 OU、用户、组、组策略等等。
Active Directory 轻型目录服务 (ADLDS) | Active Directory 应用程序模式 (ADAM) | 以 ADDS 所用源代码为基础的高性能 LDAP 服务器。
Active Directory 证书服务 (ADCS) | 证书服务 | 使用 X.509 证书提供强验证。
Active Directory Rights Management Services (ADRMS) | 权限管理服务器 | 通过创建受权限保护的文件和容器防止未授权用户使用数字资产，如文档和电子邮件。
Active Directory 联合身份验证服务 (ADFS) | Active Directory 联合身份验证服务 | 为兼容 WS-* 的 Web 服务提供 Web 单点登录和联合身份验证。
因此，要是为使用合适的术语，应该将这篇文章称为“域服务”介绍。但为了不产生混淆，还是应该把它叫做自 2000 年以来深为您称道的 Active Directory。

Windows Server 2008 中的服务器管理器
对于 Active Directory，我首先要讨论的两项改进并不是 Active Directory 域服务 (ADDS) 中的更改；而是 Windows 中的更改，它们会改变您管理 Active Directory 的方式。第一项是新的“服务器管理器”，它在您首次启动 Windows Server® 2008 服务器时就会出现。（第二项是 Active Directory 安装，稍后我们将对其进行解说。）
安装 Windows Server 2003 后，默认会随后出现“配置服务器向导”，您可能从中对服务器管理器有一定的了解。但那个版本对于日常管理不是十分有用，我所认识的每个人都选择了“登录时不显示此页”复选框。
Windows Server 2008 中的服务器管理器则非常有用（请参阅 Byron Hynes 在本期《TechNet 杂志》撰写的文章了解服务器管理器的概况）。首先，如图 2 中所示，服务器管理器现在属于 Microsoft® 管理控制台 (MMC) 管理单元，而非 Microsoft HTML 应用程序 (HTA)。这意味着它具备了用户所熟悉的界面，功能完备且易于自定义。您可随时使用服务器管理器掌控服务器角色（DNS、ADDS 和 IIS 这类主要服务）和功能（Microsoft .NET Framework、BitLockerTM 驱动器加密和 Windows PowerShellTM 这类软件组件）的安装。除了添加和删除软件，服务器管理器还为运行诊断工具（如事件查看器和 PerfMon）及系统配置实用工具（如设备管理器和 Windows 防火墙管理单元）提供了单点联络。如果您能为 Active Directory 加入 MMC 管理单元，例如，用户和计算机、域和信任关系、站点和服务，您将获得一个极为出色的界面，用于执行 Windows Server 2008 域控制器 (DC) 的日常管理。
图 2 Windows Server 2008 中的服务器管理器
图 2 Windows Server 2008 中的服务器管理器

Windows Server 2008 Server Core
Windows Server Core 是一个新的 Windows 安装选项，它提供一个精简的 Windows，仅包含运行某些关键的服务器角色（包括 Active Directory 域服务）所必需的组件。（图 3 中列出了 Server Core 支持的角色。）虽然 Server Core 安装程序有图形化 UI，但它并不运行 Windows 桌面外壳程序，并且几乎略去了所有管理和配置 Windows 的图形工具（请参阅图 4）。取而代之的是一个命令行窗口，让您对接下来的操作甚感迷茫。如何更改计算机名称？如何配置静态 IP 地址？
图 4 在 Server Core UI 中看不到太多的内容
图 4 在 Server Core UI 中看不到太多的内容
在 Server Core 最初安装的几分钟，可能会有些混乱。很快您就会重新熟悉 WMIC、NETSH 和 NETDOM，然后轻松完成所有常规设置和配置任务。并且，您仍可用注册表编辑器和记事本满足图形工具的需求。
Server Core 的主要优点是移除了许多典型 Windows 安装需要，而这些核心服务器角色不需要的代码。这样遭受恶意软件攻击的几率降低了（是件好事），并且 DC 所需的补丁和重新启动次数也大为减少（更好的事）。占用的磁盘空间少了许多，从而减小的硬盘要求，可能在一般条件下不算什么，但对于虚拟服务器环境的帮助却很大。
缺少图形化实用工具对 ADDS 的管理会造成困难吗？完全不会。通过在工作站运行实用工具，然后连接网络上的域控制器，您可远程执行绝大部分管理任务。我期望 Server Core 安装最终可以运行大部分 DC。

DCPROMO 更改
ADDS 本身最先引起您注意的更改是新的 DCPROMO。它的作用与 Windows Server 2003 中的 DCPROMO 一样，但经过重新编写后更容易使用了。例如，您不必输入您的域管理员凭证，DCPROMO 可以将您的登录凭证提供给服务器。您也不必通过键入 DCPROMO /ADV 来取得“高级模式 DCPROMO”选项，现在第一个 DCPROMO 对话框中提供了这些选项的复选框。高级模式还允许您选择复制所需的现有域控制器。这样，您就可以从生产 DC 中转移 DCPROMO 的复制负荷。
将 DC 提升到新域或林中时，DCPROMO 会为您提供选项，供您设置林和域操作级别，而不是在提升后才准许您设置。您还可指定想要在提升期间放置 DC 的 Active Directory 站点，如果存在无人参与的 DCPROMO，这会非常有帮助。DCPROMO 甚至会根据 DC 的 IP 地址对最好的站点给出建议。
新的 DCPROMO 还在一个页面上汇集了所有配置选项，让你在此选择新 DC 是全局编录、DNS 服务器还是只读 DC。您不必转到 Active Directory 站点和服务管理单元中的偏僻位置将 DC 标记为 GC。
新 DCPROMO 能恰好在提升开始前在一个响应文件中保存所有 DCPROMO 设置，这可能是它最出色的功能。比起手工整理响应文件，这要简单得多，还不容易出错。您随后可使用响应文件在其他服务器上执行无人参与的 DCPROMO。为了满足脚本痴迷者的愿望，所有 DCPROMO 选项现在均可通过命令行访问。

只读域控制器
在 Active Directory 的早期阶段，企业常常在用户可能登录的每个站点均部署域控制器。例如，银行通常在每个支行都安装 DC。其中的逻辑是每个支行的用户都能登录并访问本地网络资源，即使 WAN 失效也能如此。
那时，实际的 DC 安全需求没有被很好地理解。我看到过控制器堆放在桌子下面，路过的人可以轻易接触到它们。直到几年后，Active Directory 架构师才完全领会到不安全的 DC 所带来的安全风险，IT 组织开始将 DC 重新放回到中央数据中心。这以使分支用户必须经由 WAN 进行验证，但由于提高了安全性，这也是值得的。
Windows Server 2008 中的 Active Directory 通过引进只读域控制器或 RODC 改变了分支部署的规则。它们是 Windows Server 2008 域服务中最大的变化。
Active Directory 团队在设计 RODC 时重点考虑了分支机构的需求，他们的目标是“在分支机构就地解决问题”。这其中的要点是如果您在实际条件不安全的分支部署了 DC，基本上您是无法防止 DC（和信任它的机器）受到攻击的，但是您可防止攻击向其他域扩散。
注意，即使这需要对 ADDS 基础结构做很大的更改，但 RODC 的实现并不复杂。您的域必须处于 Windows Server 2003 的林功能级，并且域中必须至少有一个 Windows Server 2008 DC。除了是分支解决方案，在面对互联网的环境中和 DC 处于网络外围的情况下，RODC 同样发挥着重要的作用。

DC 离职
在分支机构中，需要考虑几类威胁。第一类是“DC 失窃”，即有人带着 DC 或 DC 的磁盘溜之大吉。这不但会使本地的服务崩溃，攻击者最终还有可能得到域中所有的用户名和密码，并由得以访问保密资源或造成拒绝服务。为防范这种威胁，默认情况下，RODC 不将密码哈希存储在其目录信息树 (DIT) 中。因此，用户首次向特定的 RODC 进行身份验证时，RODC 会将该请求发送给域中的完全域控制器 (FDC)。FDC 处理该请求，如果验证成功，RODC 会签发密码哈希复制请求。
受到攻击的 RODC 有可能请求敏感帐户的密码哈希。为防止这种情况发生，域管理员可为每个 RODC 配置密码复制策略。该策略由 RODC 计算机对象的两个属性组成。msDS-RevealOnDemandGroup 属性包含密码缓存于 RODC 上的组、用户或计算机帐户的独有名称（它们通常是与 RODC 位于同一站点的用户和计算机）。msDS-NeverRevealGroup 包含密码未缓存于 RODC 上的组、用户或计算机帐户的独有名称（例如，域管理员帐户绝不应将其密码哈希缓存于 RODC 上）。如 RODC 请求特殊帐户的密码哈希，FDC 会根据密码复制策略评估请求，以确定是否应将密码哈希复制给 RODC。如 DC 失窃，则受攻击的对象仅限于在从网络转移时在失窃 RODC 上缓存的密码，重要的密码不会受到攻击。
RODC 计算机对象包含的其他两个属性可以帮您精准确定应缓存其密码的帐户。msDS-AuthenticatedAtDC 属性列出 RODC 已验证了密码的帐户，msDS-RevealedList 属性命名其密码当前由 RODC 存储的帐户。
用户和计算机密码哈希并不是 DC 存储的唯一秘密信息。KrbTGT 帐户包含在每个域控制器上运行的 Kerberos 密钥分发中心 (KDC) 服务的密钥。在通常情况下，域中的每个 KDC 共享相同的 KrbTGT 帐户，所以有可能攻击者从窃得的 DC 上获取这些密钥，然后使用它们攻击域的其余部分。但是，如果每个 RODC 均有其自己的 KrbTGT 帐户和密钥，就可防止这种攻击。
应用程序还经常在 DIT 中存储密码或其他机密信息。如果攻击者窃得了 DC，可能会得到这些应用程序密码，进而用其访问应用程序。为防范这类攻击，Windows Server 2008 域服务允许管理员定义只读过滤属性集 (RO-FAS)。RO-FAS 中的属性绝不会复制到 RODC，因此不能从失窃的 DC 中获取这些属性。通过设置构架中相应 attributeSchema 对象的 searchFlags 属性的第 9 位 (0x0200)，您可以将属性指定给 RO-FAS。

门内粗汉
分支机构域控制器会面临的另一类威胁是本地服务器管理员通过利用 DC 的权限提升自己的权限，进而访问其他域资源或发起拒绝服务攻击。同样，如果本地管理员可以实际接触到域控制器，就很难防范这类攻击。但是，可以防止攻击者通过使用分支机构的域控制器攻击域中的其他 DC。
此域中的完全 DC 不会将 RODC 视为域控制器予以信任。从信任角度讲，FDC 将 RODC 视为域中的成员服务器。RODC 不是企业域控制器或域控制器组的成员。RODC 更新目录中任何内容的能力十分有限，因此即使攻击者获得了 RODC 帐户，也不会得到很高的权限。
RODC 甚至可能不出现在 DS 复制拓扑中。由于 RODC 类似正常的成员服务器，而不象域控制器，知识一致性检查器（KCC，该进程在每个 DC 上负责计算 DS 复制拓扑）不会从 RODC 构建连接对象。完全 DC 或 RODC 都不会试图从 RODC 进行复制。另一方面，RODC 将创建一个代表源自完全 DC 入站复制协定的连接对象，但是此连接对象仅存在于 RODC 副本中，其他 DC 没有该连接对象的副本。从复制的角度，RODC 像目录对象的 Roach Motel。对象向内复制，但不向外复制。

RODC 上的管理角色分离
由本地服务器管理员管理分支机构 DC 是很寻常的现象，这些管理员做每项工作，从在域控制器上运行备份，到整理键盘。但是，授予远程站点管理员在域控制器进行常规维护所必需的权限会有安全风险，站点管理员有可能提升其在域中的权限。RODC 通过提供两种管理角色分离来防止此种威胁。
第一种是域管理员可以使用 DCPROMO，以正常方式提升 RODC，或者使用两个步骤的过程，实际的提升流程安全地委派给分支站点管理员，而不授予任何域管理权限。域管理员使用 Active Directory 用户和计算机 MMC 管理单元预先在域中创建 RODC 计算机帐户，如图 5 中所示。
图 5 预先创建 RODC 计算机帐户
图 5 预先创建 RODC 计算机帐户
选择“预创建只读域控制器帐户”会运行精简型 DCPROMO，它执行要求有域管理访问权限的所有任务，包括创建计算机帐户、向站点指派 RODC、指定 DC 的角色、指定密码复制策略并定义需要权限来在 RODC 上完成 DCPROMO 操作的用户或组。委派的管理员或组存储在 RODC 计算机对象的 managedBy 属性中。
委派的管理员随后可在服务器上运行 DCPROMO。DCPROMO 将检测预创建的帐户并将服务器转化为 RODC。以此方式运行 DCPROMO 不需要域管理员凭据。
RODC 提供管理角色分离的第二种方式是在 RODC 本身创建本地管理角色。这些角色看起来像机器本地组，它们存储在 RODC 的注册表中，并且只能在 RODC 上进行评估。但是，管理员是使用 NTDSUTIL 管理本地 RODC 角色，而不是使用计算机管理 MMC 管理单元。图 6 列出了 RODC 上的本地管理角色。这些角色与 Windows 中的内置组一一对应。
Figure 6 本地 RODC 管理角色 (Close Figure 6)

帐户操作员
Administrators
备份操作员
证书服务 DCOM 访问
加密操作员
分布式 COM 用户
事件日志读取器
Guests
IIS_IUSRS
传入林信任构建器
网络配置操作员
性能日志用户
性能监控器用户
Windows 2000 以前版本兼容访问
打印操作员
Remote Desktop Users
Replicator
服务器操作员
终端服务器许可证服务器
用户
Windows 授权访问组

RODC 特性
由于 RODC 是只读的，并且其他域控制器不从其进行复制，它们会出现一些异常的行为。例如，延迟对象（即，因为 DC 的复制时间不能长于林的生存周期，所以除了特殊的 DC，该类对象已从其他位置删除）通常由 DC 的出站复制伙伴检测。但是，由于 RODC 没有入站复制伙伴，因而它们不会检测延迟对象。
RODC 不会为 LDAP 更新（添加、修改、删除、重命名或移动）操作提供服务。而是返回错误，其中包含对能提供操作的可写 DC 的 LDAP 参照。如果发起 LDAP 更新的应用程序对参照操作处置不当，应用程序将无法使用。
最后，如果林中其他域的用户试图向 RODC 验证，RODC 必须能够访问其所在域的完全 DC 来获取信任密码，以便将验证请求正确传递给用户域中的 DC。如果在其域中 RODC 和完全 DC 之间的网络连接不可用，验证将失败。

精准密码策略
能在域中定义多个密码策略可能是 Windows Server 2008 ADDS 最受欢迎的功能。您可能知道，在 Windows 2000 和 Windows Server 2003 Active Directory 中，每个域仅支持一个应用于域中所有安全主体的密码策略。如果一组特定用户需要一个单独的密码策略，您必须创建一个单独的域。但现在 Windows Server 2008 ADDS 中新增了一项功能，称为精准密码策略，您可以用它在域中定义多个密码策略。
新策略使用组将精准的密码策略应用于用户。您先在 CN=密码设置容器、CN=系统、DC=<域> 容器中创建新 msDS-PasswordSettings 对象来定义精准密码策略。msDS-PasswordSettings 对象（简称 PSO）包含与“组策略”中的密码策略设置平行的属性（请参见图 7）。
Figure 7 mSDS-PasswordSettings 对象中的属性 (Close Figure 7)

属性 | 说明
mSDS-PasswordReversibleEncryptionEnabled | 指示是否使用了可逆加密对密码进行加密的布尔值。
mSDS-PasswordHistoryLength | 密码历史记录中维护的条目数量。
mSDS-PasswordComplexityEnabled | 指示是否启用了密码复杂性限制的布尔值。
mSDS-MinimumPasswordLength | 定义最短密码长度的整数。
mSDS-MinimumPasswordAge | 指示可以更改密码前其最短使用期限的 INTEGER8。
mSDS-MaximumPasswordAge | 指示必须更改密码前其最长使用期限的 INTEGER8。
mSDS-LockoutThreshold | 指示锁定前失败登录数目的整数。
mSDS-LockoutObservationWindow | 指示纳秒数的 INTEGER8，为触发锁定，必须在此间隔内连续出现登录失败。
mSDS-LockoutDuration | 指示帐户锁定纳秒数的 INTEGER8。
随后，您可通过将用户或组名称添加到 PSO 的多值 mDS-PSOAppliesTo 属性中为用户或组指派密码策略。一旦您接受不向 OU 应用密码策略这一观念，会非常易于实施。但在其他方面还有一些复杂。
用户通常是许多组的成员。因此，如果由于这些组成员关系导致了用户产生多项相互冲突的密码策略，那又将如何呢？在这种情况下，ADDS 使用优先级评估来确定应用哪个密码策略。其工作原理如下所示：
  1. 如果密码策略直接链接用户对象（而不是通过组成员关系），将应用该密码策略。
  2. 如果多个密码策略直接与用户链接，将应用优先权值最小（由 PSO 的 msDS-PasswordSettingsPrecendence 属性值确定）的策略。
  3. 如果多个 PSO 的优先权相同，将应用 objectGUID 值最小的那个 PSO。
  4. 如果没有 PSO 与用户直接链接，ADDS 将评估与用户组相链接的 PSO。如果有多个 PSO，将应用 msDS-PasswordSettingsPrecedence 属性中值最小的那个 PSO。
  5. 如果多个 PSO 的优先权值相同，将应用 objectGUID 值最小的那个 PSO。
  6. 如果没有 PSO 与用户相关联，将使用域密码策略。
用户对象有一个名为 msDS-ResultantPSO 的新属性，协助精确排序应用给用户的 PSO。此属性包含控制该用户密码的 PSO 的独有名称。
精准密码策略赋予您更多的灵活性，但您必须仔细管理并简化这些策略。要定义精准密码策略，没有现成的实用工具，您需要使用 ADSIEdit 或查找第三方实用工具。

可重启的 Active Directory 目录服务
每次关闭域控制器进行 DIT 维护时，都会在网络服务层造成一些中断。Windows Server 2008 DC 有一项新功能，可以让您不必完全关闭 DC 就行停止目录服务。
在 Windows Server 2008 DC 上使用 NET STOP NTDS 命令来中止 ADDS。执行此操作时，DC 上的本地安全机构 (LSASS) 继续运行，但它会卸载所有与 ADDS 相关的 DLL，因此无法再使用目录服务。LSASS 随后将域验证请求转发给 DC，其操作方式与成员服务器并无二致。由于卸载了处理 ADDS 的 DLL，您可以应用与 ADDS 相关的补丁程序，或执行离线 DIT 碎片整理。ADDS 的启动与 NET START NTDS 一样简单。但是，从系统状态备份恢复 DIT 仍需要您重新启动，然后进入目录服务修复模式。
您需要知晓目录服务并不是真正的 Windows 服务。它仍是 LSASS 的一个构成组件，不关机，您无法停止 LSASS。但是在 Windows Server 2008 中启动和停止目录服务非常便利。

备份和恢复
Windows Server 2008 中对整个备份和恢复机制进行了修改。这里我不想一一累述，但新的 Windows Server 备份有一些更改影响到了 ADDS。
Windows Server 备份是一个基于卷的备份解决方案，这意味着它一次备份整个磁盘卷。另外，它仅备份到磁盘（或类似磁盘）设备，不支持磁带。
WBADMIN 命令行备份实用工具有一个系统状态备份选项。使用 WBADMIN START SYSTEMSTATEBACKUP 命令，您现在可以创建备份映像，其中包含在域控制器恢复 Active Directory 所需的全部重要系统文件。这样，备份集中最多可以有五个卷，但每个卷只包含恢复系统状态所需的文件。更有些恼人的是，从 Windows Server 2008 的 RC0 起，您无法对网络共享执行系统状态备份。您必须有可供系统状态备份映像使用的本地磁盘卷，且该卷不能是系统状态备份卷集的一部分。对于您要进行系统状态备份的每个域控制器，您可能必须向其新添加一个磁盘卷。
系统状态还原非常简单。只需将 DC 引导为目录服务还原模式，然后运行 WBADMIN START SYSTEMSTATERECOVERY 命令即可。这将产生非权威还原的 DIT，您可在其中使用 NTDSUTIL 对特定对象执行权威还原，就像在 Windows Server 2003 中一样。
Windows Server 备份中的一个方面需特别注意：它以虚拟硬盘 (VHD) 格式存储备份映像。Microsoft Virtual Server 2005 也使用这种格式存储其虚拟磁盘映像。这表示您可获取用 Windows Server 备份创建的备份映像，在 Microsoft Virtual Server 下运行的虚拟机中将其安装成一个磁盘。然后就像正常磁盘一样浏览备份内容。
ADDS 备份的另一项更改是可以使用“卷影复制服务”创建 Active Directory 的时间点快照。使用 NTDSUTIL 创建快照时，“卷影复制服务”在每个磁盘块被更新操作覆盖前，保存其更新前的映像。通过将保存的更新前映像与 DIT 的当前版本组合在一起，“卷影复制服务”可用极小的开销构建完整的 DIT 快照。无论 DIT 的大小如何，创建典型的快照只需几秒。
就其本身而言，这是一项有趣的功能，但并非总是那样有用。但是，在 Windows Server 2008 中，ADDS 纳入了一个称为 DSAMAIN 的命令行实用工具，它以只读模式安装快照映像。这样就提供了一个独立 LDAP 服务器，它很象在快照时包含目录内容的 ADLDS 实例。您可使用 LDP 实用工具或其他 LDAP 工具浏览目录，并从先前的时间点检索目录对象的版本。

使用 DFS-R 复制 SYSVOL
Windows Server 2003 R2 带有一个改良的分布式文件服务 (DFS)，其中引进了称为 DFS-R 的全新文件复制机制。它使用的是远程差分压缩，这种方式通过确定需要复制哪些目标文件块来与源文件同步，极大地减少了文件复制流量。但是，Windows Server 2003 R2 仍使用文件复制服务（而不是 DFS-R）在域控制器之间复制 SYSVOL。因此，SYSVOL 复制还是 Active Directory 管理员的问题之源。
在 Windows Server 2008 域功能级运行时，Windows Server 2008 使用 DFS-R 复制 SYSVOL，提高 SYSVOL 复制的速度和强度。这就可以将大型文件放入 SYSVOL，供所有 DC 使用。要将 DFS-R 用于 SYSVOL，必须先使用 DFSRMIG 实用工具将旧 SYSVOL 数据迁移至 DFS-R。此过程包括四个步骤：
  • 创建 DFS-R. 所需的 Active Directory 对象。
  • 在每个域控制器上为 SYSVOL 新建文件结构。
  • 转换所有域控制器以使用新的 SYSVOL。
  • 删除旧的 SYSVOL。
此过程可能花点儿时间，具体视 SYSVOL 的大小和域控制器的数量而定，但性能和可靠性的提高完全值得为此花费时间。

审计改进
Windows Server 2003 中 Active Directory 的审计系统具有双重效应。一方面，它为追踪目录中的更改提供了极其全面、灵活和安全的解决方案。但是也有事例反映遇到某些严重的使用性问题。
在 Windows Server 2003 域控制器上启用目录更改审计非常类似“全有”或“全无”，它或者启用，或者禁用。繁忙企业 DC 上的审计流量可能使审计变得不实用。通过改变单个的安全描述符配置审计系统，使其生成您真正需要的信息既费力，又容易出错。审计信息本身经常含义模糊，并且所含的信息常常是您不需要的，例如属性变化前后的值。使用 Windows 自带的工具从多个域控制器收集、关联并存档信息不太现实。
Windows Server 2008 中的目录服务审计系统解决了一些这样的问题。首先，目录服务审计新增了四个审计子类：DS 访问、DS 更改、DS 复制和详细的 DS 复制。如果您只想审计目录更改，不必费力查看所有读取和复制事件。但是，如果您想在审计日志中包含对象删除，您必须启用 DS 访问。这会生成所有 DS 对象访问的信息，本质上这还是生成了过多的信息并且仍是由您配置安全描述符来为您关心的对象生成所需的信息。
审计信息已得到了充分整理，所以它们既能读取，又包含您所需的数据。特别是，目录更改生成包含变化属性新旧值的审计日志条目。这是一个巨大的改进。唯一的不足是新旧值显示在不同的审计日志条目中，因此您必须将它们关联起来才能真正理解所做的更改。许多加载项审计日志收集产品（包括 Microsoft 审计收集服务）均支持这类关联。

UI 改进
Active Directory 用户和计算机、站点和服务，以及域和信任 MMC 管理单元对于管理 Active Directory 而言通常足够了。在 Windows Server 2008 中，基本管理工具已得到整理，并引入了一组上乘的新功能。如果您启用高级功能，每个对象的属性对话框会额外显示一个选项卡，名为“属性编辑器”。ADSIEdit 也使用这个属性编辑器选项卡，您可用它检查并编辑对象的所有属性。该选项卡本身现在可以对已编码的属性（例如 userAccountControl 属性）进行效果更好地解码。图 8 显示了无缝集成属性编辑器的方式。
图 8 Active Directory 用户和计算机中的属性编辑器
图 8 Active Directory 用户和计算机中的属性编辑器

结束语
除了我在本文中所讨论的关键点，Windows Server 2008 中的 ADDS 还有许多其他改进。例如，如果域处于 Windows Server 2008 域的功能级，KDC 使用 256 位的高级加密标准 (AES-256)。通过选中任何 DS 对象的“对象”选项卡上合适的复选框，可以启用对象的“意外删除防护”。提供数据管理服务的“可扩展存储引擎”已得到改进，可以使用单一位数的错误修正，在 DIT 出现故障时，减小了磁盘子系统产生硬件或软件错误的可能性。DNS 服务在完全加载 DNS 数据库前开始处理请求。DC Locator 模块已经增强，因此，如果它未能在所需的站点找到 DC，将尝试在最近的站点找到 DC，而不是仅使用可以在域中找到的任意 DC。NTDSUTIL 现在支持 RODC 和卷影复制服务快照。
毫无疑义，Windows Server 2008 对 Active Directory 域服务做出了相当多的改进。在它们的共同作用下，ADDS 的安全性和可管理性得到了极大的改善。最出色的是，将 Windows Server 2008 集成到您的 Active Directory 环境中不涉及巨大的迁移，整个过程属于增量更改，非常简单。

Gil Kirkpatrick 是 NetPro 的 CTO，他自 1996 年起便一直参与开发 Active Directory 软件。他与来自 HP 的 Guido Grillenmeier 一起创办了广受欢迎的 Active Directory 灾难恢复学习班。Gil 还是目录专家会议（请转到 www.dec2008.com）的创始人。


 特别报导：Windows Server 2008: IIS 7.0 入门
特别报导：Windows Server 2008 Isaac Roybal

IIS 7.0 入门
概览:
  • IIS 7.0 体系结构变化
  • 管理 IIS 7.0
  • 向后兼容
  • IIS 7.0 故障排除

每个 IT 商店均不同，它们具有其自身独特的一组需求和目标，特别是在网站或服务托管方面。Web 服务器可能需要各种修补或更改以满足组织的需求，但伴随而来的挑战是要将此方案
复制到多台服务器上，同时对所有服务器进行有效的管理。IIS 7.0 中一些最大的变化旨在帮助 IT 商店在构建 Web 服务器或 Web 场时应对这些挑战。
看过 IIS 7.0 中所有强大功能的列表后，我迫切地想与您一同分享这些功能的详细信息。当我意识到不可能在此介绍所有这些信息后，我决定重点介绍 IIS 7.0 一些最重要的功能和最大的变化。如果希望了解更多信息，请访问 IIS 社区网站 IIS.net。

新体系结构
IIS 7.0 中的核心变化与体系结构、请求处理、PHP 应用程序框架支持和配置存储相关。在 IIS 6.0 中，功能基本上是要么全有要么全无的概念。您必须安装所有功能，并且只能使用 ISAPI 来自定义 IIS。
IIS 构建在这样一个假定基础之上：Web 管理员希望从最基本的一组功能开始，然后分层添加所在环境中需要的其他功能。只有您才最了解自己所在的环境，因此 IIS 7.0 为您提供了构建块，以创建您自己的自定义 Web 服务器。这样做可以降低您的管理开销，因为它减少了服务器的攻击面，而且无需更新未使用的组件。这种新方法的核心是 IIS 7.0 的模块化体系结构。
IIS 7.0 采用的新设计使您能够选择将要安装到服务器上的功能，也称为模块。这些模块直接插入到集成请求管道中。这种新的模块化设计具有许多优势，包括减少攻击面和 Web 服务器的占用量。
IIS 目前包含 40 个默认模块（例如，基本模块、匿名模块），而且 Windows® 身份验证现在已成为能够独立添加到请求管道中的单独模块。为简化分类，所有模块分成了八个子类别（请参阅图 1）。
图 1 IIS 7.0 模块分为八个功能区域
图 1 IIS 7.0 模块分为八个功能区域
这意味着您现在可以构建与您的环境完全相符的自定义 Web 服务器。但是，如果 40 个默认模块无法提供您需要的功能，比如某些种类的自定义身份验证或内容修饰符，应该怎么办呢？没关系。您可以通过本机或托管代码编写满足需要的模块，并将其插入到管道中。这也使 Microsoft 能够独立编写和发布新模块，因此您不必等待下一个服务包或主要产品发布。IIS 7.0 还赋予您使用自定义模块覆盖 40 个默认模块中任意模块的能力。有关如何构建您自己的模块的详细信息，请访问 IIS.net。

集成请求管道
将集成请求管道想象成一组基本的线性步骤，每次提供页面时都必须出现这些步骤（如图 2 所示）。通常，必须进行某种身份验证，然后才能授权检索内容、确定和执行该内容所需的处理程序、执行任何必要的日志记录、最后发送响应。集成请求管道使 IIS 7.0 可以灵活地同时运行不同的应用程序框架。例如，您可以在 PHP 内容之上运行窗体身份验证以及自定义的日志记录模块，所有这些均在同一个管道内实现。
图 2 IIS 7.0 集成管道和模块
图 2 IIS 7.0 集成管道和模块
服务器上的每个网站都有集成请求管道，并且可通过两种模式（集成模式和经典模式）之一运行。默认的集成模式允许将特定功能项插入到管道中，使您可以精细地控制请求过程。出于兼容性考虑，经典模式通过将 ISAPI 模块插入管道来重现 IIS 6.0/ISAPI 功能。在将应用程序迁移到 IIS 7.0 时，此模式非常有用。

默认安装
现在，让我们来讨论设置您的新模块化 Web 服务器。如果查看 IIS 7.0 的默认安装，您会注意到它仅包含 10 个模块（如果包含 Windows Process Activation Service）。安装 Web 服务器角色时，IIS 7.0 安装提供 IIS 的基本功能，特别是只有那些提供类似纯 HTML 或经典 ASP 之类静态内容所需的模块。之后在服务器上安装哪些模块完全由您决定。以下是默认安装中所包含的功能：
  • 常用 HTTP 功能，包括静态内容、默认文档、目录浏览和 HTTP 错误
  • 运行状况和诊断功能，例如 HTTP 日志记录和请求监视器
  • 安全功能，例如请求过滤
  • 性能功能，例如静态内容压缩
  • 管理工具，包括 IIS 管理控制台
  • Windows Process Activation Service
如您所见，这只是最基本的服务器，不包括 ASP.NET 或其他 IIS 7.0 新功能，例如诊断和故障排除功能。在服务器上启动其他功能—例如提供类似 ASP.NET 和 FastCGI (PHP) 之类动态内容的功能—非常简单。从 Windows Server® 2008 服务器管理器内的 Web 服务器角色的“添加角色服务”中，选择一组要安装的模块。

新的配置存储
IIS 7.0 中使您的生活变得更加轻松的另一项主要变化是新的配置存储。元数据库现在是为向后兼容而提供的可选安装组件，它已经由 XML 配置系统取代。我知道您会说“但元数据库本来就是 XML 啊！”是的，确实如此。但它过于繁琐，而且不易于阅读（至少不易于人类阅读）。它已由更为灵活的 XML 系统所取代。与 ASP.NET 类似，IIS 7.0 使用 .config 文件—清晰、简单、便携且易读的 .config 文件。
转移到此格式意味着配置系统现在独立于计算机，不再像元数据库那样依赖于单个计算机。因此，您现在可以轻松地将配置系统移动到其他服务器上，只需简单地使用拖放或 xcopy 即可。
此新配置系统还利用 IIS 7.0 中称为“共享配置”的新功能解决了 Web 场的难题。由于此新配置系统便于携带，因此您可在场内的所有节点中共享一个主 .config 文件。“共享配置”允许您从已知工作情况良好的预生产服务器上导出配置，然后在生产或“实时”环境中共享该配置。
导出 .config 文件时，必须提供加密密钥密码。这样做是为了保护 .config 文件，防止恶意 Web 服务器在非经授权的情况下尝试模仿您服务器的 .config。
启用“共享配置”非常简单。在 IIS 管理器的服务器节点中，选择位于任务窗格“管理”部分下的“共享配置”。只需选中“启用共享配置”，提供要共享（通常是 UNC 共享）的配置的物理路径，然后输入访问该物理路径所需的凭据并单击“应用”即可。找到 .config 文件时，将提示您输入加密密码。完成该过程后，重新启动 IIS 管理器以便其拾取新的 .config。
新配置系统的结构与过去所使用的结构不同，让我们先了解一下基础知识。如图 3所示，IIS 7.0 的配置分为两个类别：服务器范围设置和站点特定的设置。所有服务器范围设置均存储在 applicationhost.config 内，它位于 %systemroot%\windows\system32\inetsrv\config 中。其中包括所有已安装的模块、服务器上的站点等。站点特定的设置存储在单独的 web.config 文件中。
图 3 服务器范围设置使用一个 .config 文件，而此服务器上的每个网站都使用各自独立的配置文件
图 3 服务器范围设置使用一个 .config 文件，而此服务器上的每个网站都使用各自独立的配置文件
如果您曾经使用过 ASP.NET，则可能熟悉 web.config 文件。IIS 7.0 使用 web.config 文件来存储特定于各个网站的设置，例如站点的默认文档和应用程序设置，以及 ASP.NET 设置。这意味着您需要为服务器上的每个站点提供一个 web.config 文件。
站点的 web.config 文件位于该站点的物理路径中，例如 %systemroot%\inetpub\wwwroot。此设计同样具有前面所述的便携优势，但它在站点级别使用。例如，您可以在测试服务器上简单地部署一个站点，然后通过拖放或 xcopy 将站点的 web.config 和应用程序文件移到生产服务器上。
无论何时导入或共享 .config 文件，均需注意特定于计算机的信息，如 IP 地址和驱动器盘符。IIS 7.0 通过支持 OS 环境变量（如 %systemroot%）解决了该潜在问题。此外，确保安装在测试和生产服务器上的模块组相同。这将有助于避免不可预料的应用程序错误。如果 web.config 引用了尚未安装的模块，或者默认模块与自定义模块冲突，也会发生错误。

管理您的 Web 服务器
现在，您已部署好了功能强大、自定义、灵活且便携的新 Web 服务器。如何对其进行管理呢？管理是规划和构建 IIS 7.0 的重要部分，有多种方法可以处理管理工作。
共有以下三种类别，管理首选项通常归入到至少一种类别中：在 UI 中使用鼠标管理、在命令提示符处输入命令，以及编写脚本以尽可能地实现自动化。让我们首先介绍 UI。
在 IIS 6.0 中，UI Microsoft® 管理控制台 (MMC) 管理单元有两种熟悉的基本视图：树视图和选项卡视图。要详细查看某项设置，需右键单击并选择“属性”，然后您将看到一组选项卡（未涉及单选按钮和复选框）。
令人高兴的是，在 IIS 7.0 中，UI 已彻底改观。此称为“IIS 管理器”的新 UI 旨在启用面向任务的方法，如图 4 所示。此外，还为下级客户端（如 Windows XP 和 Windows Server 2003）提供“远程管理器”，该管理器可从 IIS.net/downloads 下载。
图 4 IIS 7.0 中的新 UI
图 4 IIS 7.0 中的新 UI
新用户界面由左侧的“连接”窗格、右侧的“操作”窗格，以及中间的任务窗格或工作区组成。左侧的连接管理器树与 IIS 6.0 树视图类似，其中包含许多父节点和子节点。树视图的新功能是可以创建新连接、保存当前连接或删除现有连接。任务窗格是 UI 的最大改进，它提供了两种工作视图。功能视图从原来的“选项卡”视图中提取所有可配置的 IIS 属性，并将它们按照管理区域（例如 IIS、管理和安全）分组。
ASP.NET 属性也已集成到 IIS 管理器中，从而无需再使用额外的 MMC 管理单元。每个可配置属性都具有它自己的图标，因此便于查找。同时，因为 IIS 管理器是作为 Windows Forms 应用程序而构建的，所以您可以轻松地为所编写的任何自定义模块或功能添加插件图标。
任务窗格的第二种视图是内容视图，其与 IIS 6.0 非常相似，在此类视图中，您可以看到站点内容目录中的内容并可根据此内容执行操作。为该视图提供的新功能是选择特定内容（例如特定网页），然后切换到功能视图以调用选定内容上的某些设置，该功能为您提供了直至页面级的精细控制。

其他管理方式
对于那些喜欢使用命令行的人而言，利用称为 APPCMD.exe 的功能强大的新工具，既能够执行类似停止站点或备份当前 .config 文件之类的简单任务，也能够执行类似搜索配置架构之类的复杂任务。其语法十分简单：
APPCMD (command) (object-type) <identifier> </parameter1:value1 ...>.
要列出可用于 APPCMD 的所有对象，请键入：
APPCMD /?
或者，如果您希望查看特定对象类型的可用命令，请输入：
APPCMD (object-type) /?
对于所有编码员而言，IIS 7.0 中已增加了称为 Microsoft.Web.Administration 的托管代码 API，以及一个新的 Windows Management Instrumentation (WMI) 提供程序。这两种方法为脚本、自动化和编写工具管理 IIS 7.0 提供了大量选项。它们均可与 Windows PowerShell® 配合使用，并且 WMI 提供程序还可与 VBScript 和 JScript® 配合使用。有关其他信息，请参阅 blogs.msdn.com/carlosag/archive/2006/04/17/MicrosoftWebAdministration.aspx。

远程管理和委派管理
IIS 7.0 提供了多种新方法来远程管理服务器、站点、Web 应用程序，以及非管理员的安全委派管理权限。首先，让我们讨论一下新的远程管理功能，以及它们如何使您的生活变得更加轻松。
过去，远程管理 IIS 服务器的方法有两种：通过使用远程管理网站或使用远程桌面/终端服务来访问 UI。但是，如果您在防火墙之外或不在现场，则这些选项作用有限。IIS 7.0 通过在 UI 中直接构建远程管理功能（通过不受防火墙影响的 HTTPS 工作）来对此进行补救。
IIS 7.0 中的远程管理可以在多个方面简化工作。首先，您可以获得与本地登录相同的 UI 体验。其次，由于使用 HTTPS 协议进行通信，因此无需在防火墙上开放端口。最后，您现在可以在单个 UI 中管理多台服务器，而不必同时打开多个远程桌面或远程网站窗口。
IIS 7.0 中的实际远程管理服务在本质上是一个小型 Web 应用程序，它作为单独的服务、在名为 NT Service\WMSVC 的 Windows NT® 本地服务账户下运行。此设计使得即使在 IIS 服务器自身无响应的情况下仍可维持远程管理功能。
与 IIS 7.0 中的大多数功能类似，出于安全性考虑，远程管理并不是默认安装的。要安装远程管理功能，请将 Web 服务器角色的角色服务添加到 Windows Server 2008 的服务器管理器中，该管理器可在“管理”工具中找到。安装此功能后，还必须启用远程连接并启动 WMSVC 服务，因为该服务在默认情况下处于停止状态。
WMSVC 服务的默认启动设置为手动。如果希望该服务在重启后自动启动，则需要将设置更改为自动。可通过在命令行中键入以下命令来完成此操作：
sc config WMSVC start=auto
当通过管理服务启用远程连接时，您将看到一个设置列表，其中包含如“身份凭据”、“连接”和“IPV4 地址限制”之类的设置。此时，唯一的关键决策是确定为哪组身份凭据授予连接到 IIS 7.0 的权限：仅限 Windows 凭据，还是 Windows 和 IIS 管理器凭据。
第一个选项比较直观，指出您希望仅允许 Windows 用户帐户，本地和域帐户均可。第二个选项包括 Windows 用户和 IIS 7.0 中全新提供的一种与 Windows 用户帐户不关联的帐户类型：IIS 管理器用户。有了 IIS 管理器用户，管理员可以创建仅在 IIS 7.0 的上下文中已知、但无法访问 OS 的用户帐户。最后，在默认情况下，IIS 会在开始时提供一个自签名证书，但建议您添加有效签名的 SSL 证书。现在只需应用您的设置并启动服务即可。
为了获取更多控制和安全性，IT 管理员可以安全地将各个站点或 Web 应用程序的管理任务委派给非管理员。
委派管理实质上是远程管理，但它限制对各个站点或 Web 应用程序的访问范围。IIS 管理器用户功能此时显得尤为方便。您可以为那些一次性站点所有者创建 IIS 用户，并委派他们管理自己的站点或应用程序的权限。他们无法访问服务器范围设置，仅限于访问其特定站点或 Web 应用程序的设置。
您还可以指定用户可以更改哪些功能和设置，甚至指定 UI 中应该出现哪些内容。例如，如果您不希望某人更改其站点所使用的身份验证类型，则可将此功能设置为只读或非继承。当某项功能为只读时，用户仍然可以访问该功能并确定设置，但无法进行更改；如果设置为非继承，则该功能的图标将不会出现在委派用户的 IIS 管理器视图中。此类功能委派可以让您提供对其他内容的严格受控访问，而无需提供对 Web 服务器的管理控制。

IIS 7.0 的发展
设计 IIS 7.0 时，设计团队希望通过允许使用管理工具中的某些现有投资和 IIS 6.0 的脚本来确保迁移到 IIS 7.0 的过程尽可能地平稳。他们为 IIS 7.0 的向后兼容性付出了许多努力，从而使其能够继续运行 IIS 6.0 所使用的脚本。您可在安装中的 IIS 6.0 管理兼容性节点下安装一整套工具—范围从 IIS 6.0 元数据库兼容性到实际的 IIS 6.0 管理控制台。
IIS 6.0 元数据库兼容性基础结构使用称为 ADOMapper 的组件。它允许您根据新配置系统运行 IIS 6.0 管理基础对象 (ABO) 和 ADSI（Active Directory 服务接口）元数据库脚本，但仅限于使用 IIS 6.0 中提供的功能。因此，它不能读写新的 IIS 7.0 属性、访问新的运行时数据，或者读写 ASP.NET 属性或 web.config 文件。

故障排除和诊断
故障排除和诊断一直是最耗时的工作。深入分析日志并尝试重现大型 Web 场，甚至单个服务器中的问题都是非常棘手的工作。IIS 7.0 中包含一个称为“失败请求跟踪”的工具，可帮助您从枯燥而费时的工作中解脱出来。它在许多情况下非常有用，包括请求挂起或程序出错，以及调查身份验证和授权问题。
“失败请求跟踪”使用跟踪规则作为条件来搜索错误。可以创建跟踪规则，以通过指定希望跟踪的内容类型（例如，服务器上的所有内容、仅 ASP.NET 内容或诸如 PHP 等自定义内容），以及在何种条件下应开始跟踪（例如，特定的返回状态代码、提供页面所用的时间、事件严重性或组合条件）来搜索行为或错误的类型。
例如，假设用户报告某站点的加载时间过长。在任何情况下，此情形都难以重现，特别是当每小时有数千次点击时更是如此。使用“失败请求跟踪”，您只需添加跟踪规则，指定当页面加载时间超过某个指定时间量（例如，对于本例为两秒）时开始记录，之后便可以等待服务器自己去重现问题（请参阅图 5）。
图 5 使用“失败请求跟踪”进行故障排除
图 5 使用“失败请求跟踪”进行故障排除
“失败请求跟踪”与传统日志记录的不同之处在于：前者仅在检测到特定的失败请求条件时才会进行记录。日志文件本身是具有 XML 样式表的 XML，从而使其清晰、易读。与大多数其他 IIS 7.0 功能类似，此功能在默认情况下不会安装，但可在安装的运行状况和诊断部分下找到。您还必须在 IIS 管理器中启用该功能。
对于所有管理员而言，IIS 7.0 是一大飞跃。它的新体系结构和功能为适应不断变化的环境提供了所需的敏捷性和灵活性。有了管理功能、向后兼容性工具和故障排除功能，您如今可以对其进行部署并在您的现有环境中使用它。

Isaac Roybal 是 Microsoft Windows Server 的产品经理。他负责 Windows Server 中与 Web 相关的所有事宜。Isaac 从 Windows NT 3.51 和 IIS 4.0 开始就从事 Windows Server 方面的工作。在此之前，他是 Office Internet 平台和运营组的运营项目经理。他已获得 Windows NT 4.0、Windows 2000 和 Windows Server 2003 的 MCSE 认证。


 特别报导：Windows Server 2008: Windows Server 2008 中的策略驱动网络访问
特别报导：Windows Server 2008 Ian Hameroff and Amith Krishnan

Windows Server 2008 中的策略驱动网络访问
概览:
  • 平衡网络访问和安全性
  • 策略驱动的网络访问方法
  • Windows Server 2008 中的新安全性技术

移动员工日益增多，需要访问组织 IT 资源的用户和设备种类日见增长，从而导致传统的网络外围退出历史舞台，
这方面的文章已经有许多。为提高生产力，用户和业务线所有者们大力提倡既流畅又简约的连接体验。这样，原本已经复杂的情况又增加了许多法规符合性负担、处于演变的威胁环境以及与数据分散相关的风险。
这往往使得 Windows® 管理员在充满挑战的安全性中间需求一种平衡行为：如何能够轻松地访问资源，同时仍满足日益增长的信息和网络安全要求。
尽管所有这些挑战可能没有一个万全的解决方案，但作为 Windows 管理员，您还是可以利用许多工具来更好地控制安全性，如您已具有的边缘防火墙。为了帮助在访问权限和安全性之间达到适当的平衡，最佳方法是将传统的连接性模型转型为力求以更具逻辑和侧重策略的方式定义网络访问。

策略驱动的网络访问方法
联网资源
  • IPsec
  • 具有高级安全性的 Windows 防火墙
  • 服务器和域隔离
  • Windows Server 2008 的网络访问保护 (NAP)

策略驱动的网络访问的目的是：打破在主要根据网络拓扑边界建立基本信任时所遇到的现有限制。例如，只因为某个设备插入到您公司防火墙后面的以太网交换机端口之一中，您就能真正确定应信任该设备并授权其连接到运行“客户关系管理”(CRM) 应用程序的服务器吗？
相反，新模型通过验证设备的安全状况和请求访问的用户身份来制定访问决策，而不考虑用户从哪里进行连接。验证完成后，此相同框架随后可用于授权可以访问的信息和资源。
从防护状态转变为更注重访问权限的模式涉及诸多关键因素，包括需要可验证连接主机的身份和策略合规性的现成机制、签发受信任的用户身份，以及根据这些属性动态地控制网络访问。为简化这些形式多样的可变部分的管理，集中式策略存储也是一个重要的组成部分。
采用策略驱动方式后，您可将多个迥异的网络访问归纳到一起，并将多个安全控制托管在一个更全面的解决方案中。这样，您就可以在连接构造之上的逻辑层设置网络访问基本规则，进而改进以深层防御为主的传统最佳实践。
例如，当用户将其便携式计算机连接到组织的无线网络时，可根据最新的安全配置要求来检查设备的合规性。一旦确定该便携式计算机具备所有最新的防病毒更新和重要的安全补丁，并且启用了其所有端点安全控制（如主机防火墙），就可授予对公司网络的访问权限。之后，当用户尝试访问业务应用程序时，会使用该便携式计算机的运行状况和用户的网络身份这两种因素为依据，确定是否授权该用户连接到托管应用程序的资源。通过在物理网络基础结构之上的逻辑层进行操作，可以持续地强制执行策略，即使用户从无线转为有线，甚至远程访问连接。
实施后，策略驱动的网络访问可为用户提供更为顺畅的连接体验，而不影响进程的安全性。对于管理员，从交换机端口或远程访问网关配置来提升网络访问控制可简化管理。在这两种情况下，最终结果均是提高了生产力和组织网络运行状态的总体改进，即使网络中的各方具备不同的访问权限（例如，受邀来宾或其他来宾、供应商、合作伙伴和员工）也是如此。
与任何其他安全项目相同，实施策略驱动的网络访问的第一步是开发一组全面的操作策略。这通常包括以下几方面的指导方针：
  • 设备安全合规性—设备运行状况良好的含义是什么？
  • 逻辑网络分区—如何从授权设备中区分出运行状况不佳的设备？
  • 信息风险管理—如何分类敏感数据并保护其免受损坏？
幸运的是，Microsoft® TechNet 安全中心 (microsoft.com/technet/security) 汇集了各式各样的策略开发资源。
一旦开发出访问策略，您将需要选择那些既能轻松部署，又能有效地强制执行它们的技术。Windows Server® 2008 正是您理想的选择。这是因为它不仅是目前为止最安全的 Windows Server，还为管理员提供了稳固的安全平台，让策略驱动的网络访问解决方案具备了扎实的基础。在其众多新功能和增强功能中，Windows Server 2008 提供了大量必要组件，用于实现以策略为基础的安全网络访问，从而有助于确保敏感信息不受损坏。

下一代联网
Windows Server 2008 中网络安全改进的核心是下一代 TCP/IP 堆栈，它是平台联网功能和相关服务的一项重大更新。除了提高的网络性能和可伸缩性，Windows Server 2008 还提供了一系列集成的网络功能，它们为构建策略驱动的网络访问解决方案奠定了坚实的基础，从而使网络更加安全。
Internet 协议安全 (IPsec) 就是在 Windows Server 2008 中得到重要升级的一项此类功能，它在策略驱动的网络访问方法中扮演着重要角色。现在，这不是指使用 IPsec 作为通道和加密协议，而是充分利用其主机对主机网络验证功能。此外，由于 IPsec 在第 3 层工作，因此可利用它在各个网络类型中强制执行网络访问策略。
为了有助于更加轻松地实现基于 Ipsec 的网络访问控制，Windows Server 2008 引进了许多改进和新功能，旨在简化策略创建、实施和维护。例如，增加了可用 IPsec 验证方法的数量和类型。这是通过引进验证 IP (AuthIP) 来实现的，它是对 Internet 密钥交换 (IKE) 协议的扩展。您可以使用 AuthIP 编写连接安全规则（Windows Server 2008 中 IPsec 策略的另一名称），这些规则要求通信方不仅使用计算机凭据，还可以有选择地使用用户或运行状况凭据来成功地对彼此进行验证。这种新增的灵活性使您可以设计极为复杂的逻辑网络，同时又不必升级您的交换和路由基础结构。

具有高级安全性的 Windows 防火墙
具有高级安全性的新 Windows 防火墙以我们刚刚提到的 IPsec 功能为基础。通过将 IPsec 连接安全性规则与防火墙过滤器组合到一个策略中，新的 Windows 防火墙引进了另一种策略驱动的网络访问维度：更智能化的验证防火墙操作。
如图 1 所示，在定义入站或出站防火墙过滤器应采取的具体操作时，您可从三个选项中进行选择：允许、阻隔或仅在安全时允许。选中“Allow the connection if it is secure”（在安全情况下允许连接）时，Windows 防火墙会利用 IPsec 的主机对主机网络验证功能来确定：基于您已定义的策略，是否应批准主机或用户的连接请求。您可以使用防火墙规则设定哪些用户、计算机和组有权进行连接。值得注意的是，这增加了一个附加保护层，从而对现有的操作系统和应用程序级访问控制起到了支持作用。
图 1 定义验证防火墙规则
图 1 定义验证防火墙规则
到目前为止，您应了解到：如何可以通过一项集中式策略将不同的网络安全控制归纳到一起，从而更加灵活、有效地管理网络访问。
返回到 CRM 示例：管理员可以选中“Allow the connection if it is secure”（在安全情况下允许连接）选项，为运行公司 CRM 应用程序（通过程序的可执行文件或服务端口）的服务器创建入站规则。在相同的防火墙策略内，管理员可以指定只有“CRM Application Users”（CRM 应用程序用户）组的成员可以连接到此网络应用程序，如图 2 中所示。如果您采用此相同概念并将其扩大到您网络上所有受控计算机之间的网络通信，则您的策略驱动网络访问政策中现在又会新增一个“服务器和域隔离”层。
图 2 管理员可根据此策略指定谁可以进行连接
图 2 管理员可根据此策略指定谁可以进行连接

服务器和域隔离
大多数组织正面临着越来越多的来宾和其他不受控设备连接到其网络的情况，因此，能够以某种方式分离并保护您的信任主机已成为当务之急。令人庆幸的是，有许多途径可以将信任和受控的计算机与网络中的其他设备相隔离。但是，这些方法大多成本高昂（如另行铺设物理电缆系统），并且在网络扩大时难于维护（例如基于交换机的 VLAN）。
“服务器和域隔离”提供了一种更具成本效益和可控性的方式，将您所处的环境划分为逻辑上彼此分离且安全的网络。如图 3 所示，您基本上是使用我们先前提到的连接安全性规则（即 IPsec 策略），但通过 Active Directory® 组策略将其映射到所有受控计算机。这导致网络访问策略要求所有对等方在开始任何通信之前，先要彼此成功地验证身份。由于这种隔离发生在第 3 层，因此这些访问控制的实施可跨越物理和地理界限扩大到集线器、交换机和路由器。
图 3 定义满足您网络访问需求的验证要求
图 3 定义满足您网络访问需求的验证要求
要创建隔离的网络，需要根据所需的访问类型划分网络上的不同计算机。策略可被定义为允许隔离网络上的计算机向网络中的所有计算机发起通信，包括不在隔离网络中的计算机。反之，隔离网络外的计算机不能向隔离网络内的计算机发起通信。实际上，隔离网络内的计算机会忽略从隔离网络外的计算机发出的所有通信请求。
Active Directory 域和域成员关系用于强制执行网络策略。域成员计算机仅接受来自其他域成员计算机的已验证且安全的通信。或者，也可强制要求加密隔离域内的所有通信。
由于无需对现有网络基础结构或应用程序进行重大变更，因此“服务器和域隔离”可带来巨大的成本优势。此解决方案筑造起了启用策略的防护屏，不但有助于抵御极具破坏力的网络攻击和对受信任网络资源进行未经授权的访问，并且无需在网络拓扑发生变化时持续进行维护。

网络访问保护
如前所述，“服务器和域隔离”解决方案确保从逻辑上分隔网络上的不同计算机和服务器。它有助于防止对网络进行未经授权的访问，但不能保证已授权的计算机万无一失。
网络访问保护 (NAP) 是 Windows Server 2008 中的一个内置平台，用于确保连接到网络或通过网络通信的计算机达到您所定义的系统运行状况要求（即，安全性和策略合规性）。
即使是授权的用户也会时常成为网络上传播病毒和间谍软件的载体。例如，用户休假时，管理员可能没有对其计算机设置安全要求合规性。如果在此期间发布的强制性补丁程序或签名未能安装到计算机上，则可能会产生严重后果。
跟踪连接到网络的每名用户远远超出了管理员的能力范围。我们需要的是一种自动化工具，可以验证每台联网计算机的运行状况合规性，从而根据中央策略修正所有不合规定的状况。而 NAP 的职责正是如此，以便向您的策略驱动网络访问解决方案添加另一个层。
NAP 代理—内置于客户端计算机的操作系统中（如 Windows Vista®）或单独安装（对于旧版的 Windows 和非 Windows 操作系统）—向网络策略服务器 (NPS) 报告所有合规性方面的问题，该服务器是内置于 Windows Server 2008 中的一个策略引擎。您是在 NPS 中定义每台设备必须遵循的合规性策略。
在必须限制未通过合规性检查的设备的同时，确保它们可以进行隔离和修正也非常重要。在启用防火墙或防病毒解决方案的情况下，您可以使用 NAP 自动修正设备；或者以手动方式强制其进入隔离区。此时，设备可以访问带有最新补丁程序、更新和签名的修正服务器。一旦用户手动更新设备，在通过合规性验证后，便会授予其对网络的访问权限。
随着普及程度的提高，网络访问已越来越简单。但是，这又带来了额外的负担，必须确保设备在任何访问机制下都能保持良好的运行状况且符合规定。计算机可通过兼容 802.1X 的常规交换机或无线接入点访问网络，也可以使用 VPN 或基于终端服务的远程访问连接从住宅进行远程连接。NAP 不但可以确保通过不同机制联网的计算机满足规定要求，还在 DHCP 服务器、802.1X 交换机、VPN 网关、终端服务网关或兼容 802.1X 的无线访问点提供了强制执行措施。
在图 4 中，已使用服务器和域隔离解决方案对网络进行了隔离。将 NAP 与这样的隔离网络配合使用还有其他益处，那就是可以确保联网计算机的运行状况合规性。客户端在启动后，将其运行状况声明 (SoH) 发送给运行状况注册授权机构 (HRA)，它是一个证书服务器。HRA 向 NPS 递交 SoH 进行策略验证。如果 SoH 有效，HRA 会向 NAP 客户端签发运行状况证书，客户端即可与安全资源进行基于 Ipsec 的安全通信。如果 SoH 无效，HRA 会告知 NAP 客户端如何更正其运行状况，但不签发运行状况证书。如果其他计算机需要运行状况证书以进行 IPsec 验证，则 NAP 客户端无法与它们通信。但是，NAP 客户端可以与修正服务器通信，以便自身达到合规性。
图 4 使用 IPsec 强制措施的网络访问保护
图 4 使用 IPsec 强制措施的网络访问保护

综述
尽管我们只是介绍了 Windows Server 2008 中新特性和功能的皮毛，但识别每个组件如何构建在原有基础之上非常重要。与传统的深层防御方法相比，这一转变源自 Windows Server 2008 中提供的基础策略架构，例如，Active Directory 组策略。
您将可以为定义和部署策略驱动的网络访问解决方案奠定坚实的工作基础，同时还能利用现有投资，这都归功于此集成式方法。通过将访问决策上升至更具逻辑性且以策略为中心的层，您将有机会根据自己的需要在“便利访问”和“更高的安全性”之间寻求一种平衡行为。
Microsoft 已发布了大量指导性资料，它们深入剖析了本文章中提到的技术领域。我们建议您首先查看这些文章和分步指南，以便对各种功能的运行有个大致印象。（侧栏“Networking Resources”（联网资源）中的链接可帮助您入门。）然后，考虑部署每个阶段，注意使前一阶段为后一阶段打下良好的基础。
例如，按照“具有高级安全性的 Windows 防火墙”一节中所述，为您以任务为中心的应用程序创建一组这样的验证防火墙规则。达到要求后，您可以扩展连接安全性规则以隔离您的网络域，然后在其上部署 NAP。实施策略驱动的网络访问政策的益处很大，包括帮助您与日新月异的公司网络保持步调一致。

Ian Hameroff 是“Microsoft 安全和访问产品营销组”的高级产品经理。他负责 Windows Server 平台联网技术的产品管理和营销。Ian 推动了 Windows Server 联网和解决方案的市场投放策略，它们的重点是关键性安全和联网计划，例如服务器和域隔离、可伸缩联网以及 IPv6 采用。
Amith Krishnan 是“Microsoft 安全和访问产品营销组”的高级产品经理，他负责 Windows Server 联网和安全计划的产品管理和营销，如网络访问保护和安全无线网络。他还开发了市场投放策略并推动这些解决方案的知名度。


 特别报导：Windows Server 2008: 使用服务器管理器配置角色
特别报导：Windows Server 2008 Byron Hynes

使用服务器管理器配置角色
概览:
  • 角色和功能之间的差别
  • 使用服务器管理器可以做些什么
  • 使用向导
  • 从命令行管理角色和功能

贯穿在 Windows Server 2008 中的主题之一就是“简约”。这并不意味着不必要地去除一些功能。相反，这是简化和澄清角色和工具的一种策略，以便于您只安装所需的内容，多余的一概不安装。服务器管理器
是 Windows Server® 2008 中这一概念的重要组成部分。
它包含两方面的内容。首先是有关服务器角色和功能的最重要的概念，它们是 Windows Server 2008 的构建块。其次是“服务器管理器”工具本身。此工具不仅将取代 Windows Server 2003 中使用的多个工具，而且还在一个位置引入了多个功能，从而使得像您这样忙碌的管理员能够更快捷、更容易地完成更多工作。

角色和功能
如果您曾阅读过有关 Windows Server 2008 的文章，则很可能会遇到一些以前在 Windows® 上下文中没有听说过的术语，例如“工作负荷”和“角色”等。首先我将解释这些术语对 IT 专业人员意味着什么。
在 Windows Server 2008 的开发周期伊始，我们花费了很多时间试图了解用户是如何使用我们的服务器产品的。（顺便说一句，这种努力目前仍在继续。）总的来说，我们发现人们部署我们的服务器一般都是做一些特定的事情。这听起来可能并不是很难理解，但是对于我们中的一些人而言，当了解到人们没有使所购买的服务器充分发挥功效时，一定会感到惊奇不已。更为重要的是，他们并不部署服务器来完成数量庞大的任务。相反，他们希望一个服务器只执行特定的任务。当然，也有一些例外情况，但是在大多数情况下，都是置备一个服务器来执行特定的功能。
针对这些体会，我们将“特定的事情”归组到宽泛的分类中，称为工作负荷。例如，有一个数据库工作负荷和一个应用程序服务器工作负荷。由于工作负荷很广泛并且有时有些含混，因此我们在工作负荷中创建了一些子类别，将其称之为角色。角色是指服务器要做的单一、非常有针对性的事情。想一想您（以及组织内的用户）是如何引用网络上的服务器的。如果您与大多数用户一样，您可能将它们视为文件服务器、域控制器、打印服务器、Web 服务器等。由于人们总是习惯于这样来看待服务器，因此 Windows Server 2008 采用同样的方法来处理角色。
一般而言，Windows Server 2008 中包括三种主要类别的角色：标识和访问管理（作为 Active Directory® 一部分的角色）、基础结构（包括文件服务器、打印服务器、DNS 等）以及应用程序（如 Web 服务器角色和终端服务）。
Windows Server 2008 随附了大约 17 个服务器角色（例如 Active Directory 证书服务、网络策略和访问服务以及 Windows Server 虚拟化等）。其他额外的角色（如流媒体服务角色）很可能可以通过下载来获得。
每个角色都有必要详加介绍。部分角色在本期的《TechNet 杂志》中做了详细讨论，有些已经谈及，有些即将推出。应从 technet2.microsoft.com/windowsserver2008/en/servermanager/default.mspx 中的信息开始，逐个探究每一个角色。
开始部署 Windows Server 2008 时，需要选择在每个服务器上都安装哪些角色。这一基于角色的部署是一个非常重要的概念，主要涉及如何能够有效使用 Windows Server 2008 以及如何使资源部署更加灵活。
角色列表不包括“BitLockerTM 驱动器加密”和“网络负载平衡”(NLB) 等内容。这是因为这些都属于功能，尽管很让人心动，但它们却不是用户购买系统的真正原因。相对而言，角色却是购买系统后需要执行的任务。例如，用户不会仅为了实施负载平衡而购买服务器。但是，他们却会为了提供网站服务而购买服务器。此外，虽然 NLB 可能是某项用途（例如 Web 服务器）的一个必不可少的方面，但它并不是服务器存在的目的。
我们并不会安装服务器的所有功能并将其激活，而是由管理员选择需要安装的功能。（Windows Server 2008 所包含的功能列表如图 1 所示。）由于只包含所需的角色和功能，因此稳定性和安全性都有所改善。您再也不必考虑那些被未安装的角色或功能所消耗的资源。也不必考虑对未安装的功能或角色进行故障排除或进行安全设定。
Figure 1 Windows Server 2008 中包含的功能 (Close Figure 1)

Microsoft .NET Framework 3.0 功能
BitLocker 驱动器加密
BITS Server Extensions
连接管理器管理工具包
桌面体验
组策略管理
Internet 打印客户端
Internet 存储名称服务器 (iSNS)
LPR 端口监控器
消息队列
多路径 I/O
对等名称解析协议
Windows 音频/视频体验质量 (qWave)
远程协助
远程服务器管理工具
可移动存储管理器
RPC Over HTTP 代理
NFS 的服务
SMTP 服务器
SAN 的存储管理器
简单 TCP/IP 服务
SNMP 服务
基于 UNIX 的应用程序的子系统
Telnet 客户端
Telnet 服务器
普通文件传输协议 (TFTP) 客户端
故障转移群集
网络负载平衡
Windows Server 备份
Windows 系统资源管理器
Windows Internet 命名服务 (WINS) 服务器
无线 LAN 服务
Windows 内部数据库
Windows PowerShell
Windows Process Activation Service
Server Core 安装选项就是此概念的缩影。Server Core 不在本文讨论范围内，但是您可以看到采用未使用的角色和功能的逻辑扩展，甚至可以不必将其复制到硬盘或使其可用。常规安装和 Server Core 安装之间的一个主要区别在于，常规安装在任何时候都包括安装附加角色所需的资源，并且它支持所有角色。而 Server Core 甚至没有 GUI 作为其外壳，并且只支持有限数量的角色。

服务器管理器
Windows Server 2008 新的“服务器管理器”控制台使得在企业中管理和保护多个服务器角色变得更为容易。“服务器管理器”在本质上是扩展的 Microsoft® 管理控制台 (MMC)，利用它您可以实际查看和管理影响服务器生产率的所有信息和工具。它为管理服务器的标识和系统信息、显示服务器状态、确定服务器角色配置问题以及管理在服务器中安装的所有角色提供了单一来源。（请注意，它还会替换 Windows Server 2003 中所包含的多个功能，如“管理服务器”、“配置服务器”、“添加或删除 Windows 组件”等。）
在某些情况下，“服务器管理器”也可以减少管理员在部署服务器之前运行“安全配置向导 (SCW)”的需要。服务器管理器将配置您的服务器，以使任何安装的角色都起作用（例如，自动配置 Windows 防火墙）。但是，当角色在添加后又被删除时，或希望对精确安全设置有更多控制时，SCW 仍是一个非常有价值的工具。有关详细信息，请参阅本期的 Jesper Johansson“安全观察”专栏“在 Windows Server 2008 中使用 SCW”(microsoft.com/technet/technetmag/issues/2008/03)。
在使用 Windows Server 2008 时，我们曾认真研究过我们究竟希望管理员如何执行任务。我们找到了一些可以利用工具和向导使工作更易于完成的方法，并且还发现在某些情况下，需要频繁地在各工具间跳来跳去。我们为 Windows Server 2008 制定了通用的重要设计目标（为“服务器管理器”则制定了专用目标），通过让管理员在单个位置执行多种类型的任务，来使服务器管理变得更有效。因此，利用“服务器管理器”，您可以：
  • 查看和更改服务器上安装的服务器角色和功能。
  • 执行特定于服务器的管理任务，如启动或停止服务、管理本地用户帐户等。
  • 执行特定于服务器上所安装角色的管理任务。
  • 检查服务器状态、确定关键事件以及分析配置问题。
  • 使用 GUI 或命令行安装或删除角色、角色服务和功能。
“服务器管理器控制台”提供了集成在小范围内的许多信息和功能。图 2 显示了“服务器管理器控制台”上的“文件服务”角色节点。控制台的主窗口包含四个可折叠的部分：“服务器摘要”、“角色摘要”、“功能摘要”以及“资源和支持”。
图 2 显示文件服务角色的服务器管理器控制台
图 2 显示文件服务角色的服务器管理器控制台
“服务器摘要”部分包括两个子部分，“计算机信息”和“安全信息”。“计算机信息”子部分显示计算机名称、域、本地管理员帐户名、网络连接以及操作系统的产品 ID 等。此处也可以使用命令来编辑此信息。“安全信息”子部分显示 Windows 自动更新和 Windows 防火墙是否启用，以及“Windows Internet Explorer® 增强的安全配置”是否开启（对管理员或其他用户）。同样，还有一些命令可编辑这些设置及查看所有高级选项。
“角色摘要”部分包含一个表格，指示服务器上都安装了哪些角色。利用此部分中的命令，您可以添加或删除角色，或转到更详细的控制台并从中管理特定的角色。
“功能摘要”部分提供一个表格，其中显示服务器上都安装了哪些功能。正如所期望的那样，您可以在此处添加或删除功能。
最后，“资源和支持”部分指明服务器是否参与“客户体验改善计划”和“Windows 错误报告”，并允许您在反馈程序中配置服务器的参与情况。您还可以快速找出在 Windows Server TechCenters 和“技术资源库”中提供的其他相关帮助和搜索主题。

角色信息
每个安装的角色在“服务器管理器”中都有自己的主页。对其中的每个角色主页，“资源和支持”部分都会提供一个推荐的配置或方案菜单，而角色或部分角色将在其中进行工作。每个推荐的配置都链接到一个帮助检查表，该检查表可指导您完成为给定角色创建最佳体验所需执行的任务。
“服务器管理器”的一个特别值得称道之处是突出了重要的信息和命令，将其放在了您需要它们的地方。例如，在查看“文件服务”角色主页时，您会立即看到与该角色相关的任何事件，而不必启动“事件查看器”并构建筛选器。
但是，有些角色会生成成百上千个事件，因此您也可以直接从角色主页建立自定义筛选器。您可以在侧菜单上选择“Filter Events”（筛选事件），然后进一步缩小要显示的事件的范围。此对话框并不提供事件日志查看器中可用的所有筛选选项，但是利用它您的确可以快速定位到只与此特定角色相关的事件，而不用担心会筛选出其他事件。
同样，您可以查看系统服务（此角色以及整个系统的部分其他角色所要求的服务）和角色服务（特定于此角色的服务）的状态。对于某些角色，您可以选择可供使用的角色部分，以及将要安装的不同角色服务组。在角色主页中，您可以直接启动和停止服务，也可以指定哪些服务应作为该角色的系统服务加以监视。

使用向导
一个设计良好的向导能帮助您节省时间并防止出错，尤其是在处理只是偶尔执行的任务时。以前版本的 Windows Server 要求您使用“配置服务器”、“管理服务器”、“添加或删除 Windows 组件”来更改服务器中所安装的组件。依赖关系检查受到了限制，并且“添加或删除 Windows 组件”要求必须在完成一个角色的安装后，才能添加另一个角色。
现在，使用“服务器管理器”向导，您可以在单个会话中安装或删除多个角色、角色服务和功能。更为重要的是，现在依赖关系检查是通过“服务器管理器”向导在操作进行过程中执行的，这可以确保所有必需的角色和角色服务都已安装。此外，这些角色都是使用推荐的默认安全设置进行配置的，但是您也可以使用“安全配置向导”来修改安全设置。实际上在执行了“服务器管理器”向导的一个会话后，您就可以完全做好服务器的部署准备。
“服务器管理器”包含许多向导，其中包括“添加角色向导”、“添加角色服务向导”、“添加功能向导”、“删除角色向导”、“删除角色服务向导”以及“删除功能向导”等。
您可能已经猜到，“添加角色向导”用于向服务器添加角色、自动检查角色之间的依赖关系，并核对每个所选角色是否都已安装了所有必需的角色和角色服务。对于某些角色，如“终端服务”和“Active Directory 证书服务”，“添加角色向导”还提供配置页面，使用户可以指定如何将角色配置为安装进程的一部分。图 3 显示了“添加角色向导”的“Select Server Roles”（选择服务器角色）页面。
图 3 使用“添加角色向导”选择服务器角色
图 3 使用“添加角色向导”选择服务器角色
大多数角色都是由多个子元素组成的，这些子元素被“服务器管理器”作为角色服务加以引用。安装了复杂的角色后，可使用“添加角色服务向导”将角色服务添加到角色。
与“添加角色向导”类似，“添加功能向导”允许您安装功能。您可以在单一会话中向系统添加一个或多个功能。
“删除角色向导”，顾名思义可以从服务器删除角色。该向导自动检查依赖关系，以确保未删除的角色所需的任何角色或角色服务仍保持已安装状态。您也可以使用“删除角色服务向导”从安装的角色中删除角色服务。而“删除功能向导”可从系统中删除功能。

命令行
我有时会遇到不喜欢使用向导的 IT 专业人员。虽然只有极少数人的这种想法很强烈，但是许多 IT 专业人员都很愿意选择使用命令行。它可能会更方便，并易于重复使用和编写成脚本。“服务器管理器”提供了一个命令行工具，即 ServerManagerCmd.exe，它明显要比早期的 ocsetup 和 pkgmgr 工具更为容易。您可以使用 ServerManagerCmd.exe 来安装和删除角色、角色服务以及功能。此外，您可以使用简单的参数来显示所有角色、角色服务和功能的列表（包括已安装的和可供安装的）。
更为方便的是，利用此命令行，您可以执行无人参与的角色、角色服务和功能的安装与删除。您还可以使用命令行来安装或删除单个角色、角色服务或命令实例中的功能，或者使用包含“服务器管理器”命令的 XML 应答文件在单个命令实例中添加或删除多个角色、角色服务和功能。此外，您可以查看操作日志，还可以通过运行查询来显示那些已安装的和可供安装的角色、角色服务和功能的列表。
此命令行工具的一个亮点是 whatif 参数，利用此参数您可以看到如果安装指定的角色，服务器将会发生什么变化。例如，图 4 显示了运行以下命令的结果：
ServerManagerCmd -install Web-Server
-allsubfeatures -whatif
很明显，您可以将此输出结果保存到文件中以便做进一步的分析。
图 4 使用 –whatif 参数查看服务器会发生的变化
图 4 使用 –whatif 参数查看服务器会发生的变化
要深入了解详细信息和 ServerManagerCmd.exe 的语法，请参阅“服务器管理器技术概述附录”，它可从 go.microsoft.com/fwlink/?LinkId=107113 获得。
非常感谢 Gaby Kaplan 对本文的完成所做的贡献。

Byron Hynes 是 Microsoft“企业和合作伙伴组”的企业技术规划师。之前他曾在 Windows Server 部门工作，担任顾问兼培训师。您可以通过向 bhynes@microsoft.com 发送电子邮件与他联系。


 特别报导：Windows Server 2008: 使用 System Center 部署 Windows Server 2008
特别报导：Windows Server 2008 Tim Mintner

使用 System Center 部署 Windows Server 2008
概览:
  • Configuration Manager 部署功能
  • 创建和自定义服务器任务序列
  • 添加服务器角色
  • 设置特定于计算机的变量

随着 System Center Configuration Manager 2007 的发布，服务器管理员现在可以使用客户端管理员已使用多年的相同操作系统
部署工具。在过去，服务器管理员常常需要使用 CD 或 DVD 手动安装 Windows Server®，然后再耗费数小时时间来配置服务器。某些管理员则有所变通，他们通过创建一个 unattend.txt 文件（并且也许还会使用远程安装服务 (RIS)）来构建无人参与安装例程，从而自动化安装过程，这样就不必一直守在服务器控制台前。更高级的管理员则利用 Windows Server 2003 的自动部署服务 (ADS) 来完全自动化整个服务器构建过程。现在，对于 Windows Server 2008，服务器的安装过程发生了自 Windows NT® 4.0 以来的首次实质性变化。
Windows Server 2008 部署使用与 Windows Vista® 相同的底层部署工具和技术。正是由于这一变化，服务器管理员过去使用的工具将需要更新或更换。RIS 已被 Windows® 部署服务 (WDS) 取代，且 ADS 并不支持 Windows Server 2008 部署。有关服务器和客户端部署中发生变化的技术和工具的更多信息，请参阅“部署 Windows Vista 需要了解的十大事项”，网址为 technetmagazine.com/ issues/2006/11/Deployment。
既然部署 Windows Server 2008 和 Windows Vista 所使用的底层技术相同，那么如果能使用相同的工具和知识来部署这两种操作系统，岂不大快人心？System Center Configuration Manager 和 Microsoft® 部署现在就提供有此类集成的工具集。本文将介绍如何使用 Configuration Manager 和 Microsoft 部署来部署 Windows Server 2008。

使用 Configuration Manager 部署操作系统
开始部署 Windows Server 2008 之前，我们先来回顾一下 Configuration Manager 的操作系统部署功能。当启动 Configuration Manager 控制台并转到“Computer Management”（计算机管理）时，您会发现一个新区域“Operating System Deployment”（操作系统部署）（如图 1 所示）。
图 1 操作系统部署页面
图 1 操作系统部署页面
在此页面中，可查看您的环境中已发生操作系统部署的概述，并且可导航至其他操作系统部署节点，如“Manage Task Sequences”（管理任务序列）和“Manage Boot Images”（管理引导映像）。其中有“Web Reports”（Web 报告）列表，可通过它们来查看部署的状态以及部署环境的运行状况。“Resources”（资源）下还有一个快速帮助参考，可通过它转到操作系统部署帮助文档。
如果查看导航窗格中的节点，可看到执行操作系统部署所必须配置的所有项目。接下来，简要介绍这些项目：
引导映像 包含基于 Windows PE 2.0 且将在部署过程中用到的各种引导映像。
计算机关联 主要用于客户端部署，可将现有计算机映射到新机器以便安全地管理“用户状态”。它还包含一个向导，此向导可将未知计算机帐户导入到 Configuration Manager 数据库中，以便可以部署裸机服务器。
操作系统映像 包含一个包列表，这些包中保存有用于服务器和客户端部署的自定义 Windows 映像格式 (WIM) 映像。
操作系统安装包 保存有包含操作系统部署所需的整套源文件（如 Windows Server 2008 的源文件）的包。
任务序列 包含多个步骤，每个步骤均定义了无需用户干预即可运行的命令行操作。任务序列推动了整个操作系统部署过程，并且可提供部署和配置操作系统所需的所有步骤。
驱动程序 用于管理各种服务器和客户端计算机所需的所有驱动程序的中央存储库。
驱动程序包 包含可分发到各 Configuration Manager 分发点并会在服务器或客户端计算机部署过程中使用的一组或多组驱动程序。
基本了解 Configuration Manager 的操作系统部署功能后，让我们开始部署 Windows Server 2008 吧。

做好部署 Windows Server 2008 的准备
何为 Microsoft 部署？
Microsoft 部署是商用台式机部署 (BDD) 2007 的下一版本。它将台式机和服务器部署所需的工具和流程集成到一个公用部署控制台和指南集合。此产品为使用 System Center Configuration Manager 2007 的台式机和服务器添加了新的部署和任务定序功能。
可从 Microsoft 下载中心获取 Microsoft 部署，并可在 Microsoft TechNet 上的台式机部署和服务器部署技术中心中在线阅读指导材料。有关这些目标和其他相关内容的更多信息和链接，请访问 microsoft.com/deployment。

为使用 Configuration Manager 来部署 Windows Server 2008，需拥有以下项目：
Microsoft 部署工具包 (MDT) 提供用于部署服务器和客户端操作系统的工具和最佳实践文档。它直接集成在 Configuration Manager 控制台中，以简化部署过程。可从 microsoft.com/deployment 下载 Microsoft 部署工具包。
自定义引导映像 Configuration Manager 提供基于 Windows PE 2.0 的 32 位和 64 位引导映像，并且支持 VBScript、Windows 管理规范 (WMI) 和 HTML 应用程序 (HTA)。但是，如果希望部署过程从单独的 SQL Server® 数据库请求信息，则需要自定义支持 ADO 的引导映像。
操作系统安装包 包含 Windows Server 2008 DVD 中的源文件。
MDT 包 包含 Microsoft 部署工具包所需的所有脚本和支持文件。
Configuration Manager 客户端软件包 包含 Configuration Manager 客户端的安装文件。
设置包 包含用于自动安装 Windows Server 2008 的 unattend.xml 文件，以及用于 Microsoft 部署工具包的 customsettings.ini 文件。
Sysprep 包 仅在部署 Windows Server 2003 或 Windows XP 时使用，用于提供 sysprep 文件以让计算机做好捕获操作系统映像的准备。
驱动程序 包含特定型号服务器所需的所有驱动程序。
包源和已捕获 WIM 的网络共享 存储以上所列各包以及自定义 WIM 映像的通用命名约定 (UNC) 位置。
创建所有这些包可能需要大量工作。但现在有个好消息，即如果使用 Microsoft 部署工具包，则通过一个向导就可创建所有包。
为使 Microsoft 部署工具包可与 Configuration Manager 一起使用，必须将其安装在装有 Configuration Manager 管理控制台的同一台计算机上。完成安装后，转到“开始”|“所有程序”|“Microsoft Deployment Toolkit”（Microsoft 部署工具包），并选择“Configure ConfigMgr Integration”（配置 ConfigMgr 集成），然后指定 Configuration Manager 站点服务器的名称和站点代码，并单击“Next”（下一步）。从而为 Configuration Manager 控制台添加了由 Microsoft 部署工具包提供的扩展功能。现在，如果启动 Configuration Manager 控制台并右键单击“Task Sequences”（任务序列），将可以看到一个新选项（如图 2 所示）
图 2 导入 Microsoft 部署任务序列
图 2 导入 Microsoft 部署任务序列
选择“Import Microsoft Deployment Task Sequence”（导入 Microsoft 部署任务序列）并按照以下步骤创建必要的包和 Windows Server 2008 任务序列：
  1. 在“Choose Template”（选择模板）屏幕中，选择“Server Task Sequence”（服务器任务序列），然后单击“Next”（下一步）。
  2. 提供任务序列名称以及说明该任务序列的注释，然后单击“Next”（下一步）。
  3. 填写加入域或工作组所需的详细信息，包括用于将服务器加入域的用户帐户凭据。填写组织信息和产品密钥，并且提供将要捕获的自定义 WIM 映像的 UNC 路径和文件名。提供用户凭据以连接到存储 WIM 文件的网络共享，然后单击“Next”（下一步）。
  4. 在“Boot Image”（引导映像）屏幕中，选择创建新的引导映像包，并提供用作该引导映像包的包源目录的网络位置，然后单击“Next”（下一步）。
  5. 为引导映像包提供包名称、版本信息和注释信息，并单击“Next”（下一步）。
  6. 选择平台（x86 或 x64）、ADO 支持、所需的任何可选字体、引导映像的自定义背景（如果需要）以及要包含在 Windows PE 映像中的任何其他文件夹，然后单击“Next”（下一步）。
  7. 在“MDT Package”（MDT 包）屏幕中，选择“Create a new Microsoft Deployment Toolkit Files Package”（创建新的 Microsoft 部署工具包文件包），提供用作包源的 UNC 路径，并单击“Next”（下一步）。
  8. 为 MDT 包提供名称、版本、语言、制造商和注释信息，并单击“Next”（下一步）。
  9. 对于操作系统映像，选择“Create a new OS Install Package”（创建新的操作系统安装包），提供 Windows Server 2008 源文件的路径和用作包源目录的 UNC 位置，并单击“Next”（下一步）。
  10. 对于客户端软件包，选择“Create a new Configuration Manager client package”（创建新的 Configuration Manager 客户端软件包），并单击“Next”（下一步）。
  11. 对于设置包，选择“Create a new Settings Package”（创建新的设置包），并提供用作设置包的包源的 UNC 位置，然后单击“Next”（下一步）。
  12. 对于 Sysprep 包，选择“No Sysprep Files required”（无需 Sysprep 文件），并单击“Next”（下一步）。
此时，向导将创建引导映像和所有包。如果展开“Packages”（包）、“Boot Images”（引导映像）、“Operating System Install Packages”（操作系统安装包）和“Task sequences”（任务序列），即可看到已创建的所有包和任务序列。创建完所有包后，应将其部署到各分发点。
除这些包外，还常常需要为特定的服务器硬件添加驱动程序。将驱动程序添加到 Configuration Manager 驱动程序库，并创建将在部署期间使用的驱动程序包即可。
要将驱动程序导入驱动程序目录并创建一个驱动程序包，请转到 Configuration Manager 控制台，右键单击“Drivers”（驱动程序），并选择“Import”（导入）。选择导入指定 UNC 路径中的所有驱动程序，然后键入包含为特定服务器型号收集的所有驱动程序的 UNC 路径。完成后，单击“Next”（下一步）。
在“Drivers Details”（驱动程序详细信息）页面中，选择要导入的 INF 文件，并可将驱动程序指定到某个类别。（可根据特定服务器型号类型定义类别。）单击“Next”（下一步），然后在“Add Drivers to Package”（将驱动程序添加到包中）页面中，单击“New Package”（新建包）。指定名称、注释和用作该驱动程序包的包源的 UNC 路径，并单击“OK”（确定）。选择“Update distribution points when finished”（完成后更新分发点）并单击“Next”（下一步）。
在“Add Driver to Boot Images”（将驱动程序添加到引导映像）页面中，选择之前创建的引导映像，并选中“Update distribution points when finished”（完成后更新分发点）复选框。单击“Next”（下一步），然后在“summary”（摘要）页面中，再次单击“Next”（下一步）完成向导，导入驱动程序并创建驱动程序包。

编辑任务序列
创建完安装 Windows Server 2008 所需的所有包和任务序列后，您可能希望自定义默认任务序列中的一些操作。右键单击要修改的任务序列，然后选择“Edit”（编辑）。随即显示 Microsoft 部署服务器任务序列模板（如图 3 所示）。
图 3 可自定义默认任务序列
图 3 可自定义默认任务序列
从较高层次来看，任务序列是一系列称为任务的命令行项目，每个任务执行一些特定的操作。每个任务可能包含可配置的特定属性，并且还可以在“Options”（选项）选项卡中设置条件来判断是否应执行特定任务。例如，任务序列中的首个任务的执行条件如图 4 所示。
图 4 可在“Options”（选项）选项卡中禁用某个任务或为其设置条件
图 4 可在“Options”（选项）选项卡中禁用某个任务或为其设置条件
在本例中，默认禁用该任务，因为已选中“Disable this step”（禁用此步骤）复选框。如果启用了该任务，则它将根据当前指定的条件运行。
在部署 Windows Server 2008 之前可能需要修改的一些更为常见的任务包括：“磁盘格式化和分区”、“验证”、“应用操作系统映像”和“应用网络设置”。
“磁盘格式化和分区”任务可为服务器部署定义创建磁盘分区结构的方法。默认创建一个分区，它使用第一个磁盘上的所有空间。您可能不希望使用此配置来部署您的服务器，因此可更改此设置以指定您希望使用的磁盘布局。
“验证”任务可检查一些基本需求，如内存和处理器速度。举例来说，如果您公司的服务器部署标准是 2GB 内存，则可将其设为一个基本需求，如果服务器没有满足该要求，安装将终止。
“应用操作系统映像”任务可配置要部署的特定映像。例如，当使用 Windows Server 2008 的源文件时，可选择部署 Server Standard、Server Enterprise、Server Datacenter、Server Standard Core、Server Enterprise Core 和 Server Datacenter Core 等各种版本。您需要选择要使用的映像，具体取决于您希望部署 Windows Server 2008 的哪个版本。
“应用网络设置”任务可为网卡配置静态 IP 地址，并更改设置以便加入域或工作组。尽管可使用此任务设置静态 IP 地址，但这样会导致该任务序列仅适用于一台服务器。稍后，您将了解到如何使用变量来设置静态 IP 地址，以便将单个任务序列用于多台服务器。

安装并配置服务器角色
到目前为止，您已了解到如何修改任务序列以配置与操作系统安装相关的项目。但是，通过使用 Microsoft 部署工具包，您还可安装和配置服务器角色。例如，可配置一个任务序列，以将 Windows Server 2008 部署到将运行只读域控制器和文件服务器的分支机构服务器。
要成功实现此目的，在任务序列编辑器中导航至“Install Software”（安装软件）任务，并选择“Add”（添加）| MDT |“Install Roles and Features”（安装角色和功能）。然后，在新创建的“安装角色和功能”任务中，选中“Active Directory Domain Controller”（Active Directory 域控制器）和“File Server”（文件服务器）（如图 5 所示）。
图 5 安装角色和功能
图 5 安装角色和功能
现在，需配置只读域控制器的设置。在任务序列编辑器中，选择“Add”（添加）| MDT |“Configure ADDS”（配置 ADDS）。在新创建的“配置 ADDS”任务中，选择创建新的只读域控制器副本，并指定下列属性的值：
  • 现有域的 DNS 名称
  • 复制源域控制器
  • 帐户
  • 恢复（安全模式）密码

使用变量
任务序列为用户提供了许多强大的功能，其中之一就是用户可在部署过程中将任务序列中的几乎所有属性动态设置为变量，理解这一点非常重要。Configuration Manager 和 Microsoft 部署均提供有许多设置和使用变量的机制。
Configuration Manager 允许将变量设置为计算机变量、集合变量或直接在任务序列内部设置。Microsoft 部署允许通过 customsettings.ini 文件、后端数据库或 Web 服务来设置变量。可在 technet.microsoft.com/bb632442.aspx 获得可供设置的变量列表。
以在特殊服务器上设置静态 IP 地址为例。从本文前述内容可知，可直接在“应用网络设置”任务中的任务序列内部设置静态 IP 地址。但这并非最理想的做法，因为这样将导致该任务序列仅适用于一台特定服务器。
如果您希望的是保持该任务序列的独立性，则应通过变量来设置 IP 地址。以下是如何将静态 IP 地址设置为计算机变量的分步过程：
  1. 在 Configuration Manager 控制台中，导航至 System Center Configuration Manager | “Site Database”（站点数据库）|“Computer Management”（计算机管理）|“Collections”（集合）。
  2. 要指定特定于每台计算机的变量，需找到并展开该计算机所属的集合，右键单击该计算机，单击“Properties”（属性），然后单击“Variables”（变量）选项卡。
  3. 要指定自定义变量及其关联值，请单击“New”（新建）图标打开“<New> Variable”（<新建>变量）对话框。
  4. 在“<New> Variable”（<新建>变量）对话框中，必需指定变量名以及是否在 Configuration Manager 2007 控制台中显示该变量。对于静态 IP 地址，需要添加以下变量：
  • OSDAdapter0IPAddressList
  • OSDAdapter0SubnetMask
  • OSDAdapter0Gateways
  • OSDAdapter0DNSServerList
所配置变量应类似图 6 所示。
图 6 使用计算机变量来设置静态 IP 地址
图 6 使用计算机变量来设置静态 IP 地址

部署任务序列
配置了完整的任务序列并设置好变量后，就可以开始部署 Windows Server 2008 了。Configuration Manager 提供许多用于部署操作系统的机制，例如预引导执行环境 (PXE)、任务序列可引导介质、独立介质以及通过对现有机器进行标准公告。
为简单起见，我将简要介绍如何为可引导介质创建任务序列。在 Configuration Manager 控制台中，导航至“Task Sequences”（任务序列），然后从“Actions”（操作）菜单中选择“Create Task Sequence Media”（创建任务序列介质）。在“Select Media Type”（选择介质类型）页面中，选择“Bootable Media”（可引导介质）并单击“Next”（下一步）。在“Media Type”（介质类型）页面中，将 CD 指定为介质类型，并为介质文件指定一个名称。在“Security”（安全）页面中，可指定密码来保护介质或自签名证书。接下来指定引导映像。完成后，将转到“Confirmation”（确认）页面，单击其中的“Finish”（完成）。有关如何使用此类机制来执行部署的详细说明，请参阅 technet.microsoft.com/bb681029.aspx 处的文档。

结束语
本文介绍了如何使用 System Center Configuration Manager 和 Microsoft Deployment 来部署 Windows Server 2008、添加文件服务器和域控制器之类的角色、设置特定于计算机的变量以及使用任务序列可引导介质来部署操作系统。尽管实际的服务器部署过程可能复杂得多，但本文可作为您开始统一服务器和客户端部署工具的敲门砖。

Tim Mintner 是 Microsoft Solutions Accelerator 小组的高级软件开发工程师，主要从事 Microsoft 部署工具包方面的工作。他在与客户合作部署 Microsoft 操作系统方面拥有超过 14 年的工作经验。可通过 tmintner@microsoft.com 与 Tim 联系。


 特别报导：Windows Server 2008: Windows Server 2008 中的审核和符合性
特别报导：Windows Server 2008 Rob Campbell and Joel Yoker

Windows Server 2008 中的审核和符合性
概览:
  • 日益重要的符合性
  • 了解环境中所发生的变更
  • 审核安全事件所面临的挑战
  • 审核的技术方面问题

在信息技术世界里，变更是永恒的。如果您的 IT 组织与大多数其他 IT 组织并无二致，那么了解在您的环境中所发生的变更就会成为您不得不面对的压力，而且这种压力与日俱增。IT 环境的复杂性和规模不断变大，
由于管理错误和意外数据泄漏所带来的影响也越来越严重。当今的社会要求组织对此类事件负责，因此组织现在担负着法律责任来保护它们所管理的信息。
这样一来，审核环境中所发生的变更也就变得至关重要。为什么呢？通过审核，可以为了解和管理当今高度分散的大型 IT 环境中的变更提供方法。本文将涵盖大多数组织所面临的常见难题、IT 组织中符合性和规定的前景、Windows® 中的一些基本审核，还将说明如何借助 Windows Server® 2008 的功能和 Microsoft® System Center Operations Manager 2007 Audit Collection Services (ACS) 来完善全面的审核策略。

审核挑战
瞥一眼新闻标题就会发现，现在数据泄漏已逐渐成为一种常见问题。在这些意外事件中，许多都涉及到诉讼、财务损失以及组织要承担的公共关系问题。能够解释所发生的变更或能够快速确定问题是减小数据泄漏事件影响的关键。
例如，假定您的组织负责管理给定客户群体的“个人身份信息”(PII)。尽管有多种方式来保护您所管理的系统中所包含的信息，但仍可能会出现安全问题。通过适当的审核，组织可以准确知道存在安全问题的系统和可能会丢失的数据。如果不进行审核，数据丢失所造成的影响可能会非常大，这主要是因为没有办法来估计危害程度。
那么为什么还没有 IT 组织这样做？原因在于，大多数组织没有完全了解审核的技术方面问题。而高级管理层通常只了解诸如备份和还原等概念，审核环境中所发生的变更具有内在的复杂性，这是一种很难传达的消息。因此，有关审核的问题通常只在重大意外事件发生后才会浮现出来。例如，虽然基本审核可能已启用，但如果因缺少规划而未将系统配置为审核某个特定变更，则不会收集该信息。
此外，在审核的安全事件中还有一些内在的问题需要 IT 专业人员来处理。其中一个难点是当今大型计算环境中系统的分布问题，这会给收集和聚合带来严峻的挑战，因为变更可能在任意给定时间出现在任何一个或一组系统中。进而还会产生另一个挑战 — 关联。有时需要转换单个系统和多个系统上的事件间的关系，以提供所发生事情的真正涵义。
还要注意的另外一个问题是审核通常会超越传统组织的边界。不同的组织或团队结构出于不同的原因而存在，可能不容易将其连接起来。许多组织都有目录服务团队、消息传递基础结构团队和桌面团队，但可能只有一个安全团队负责所有这些领域。而且，组织内的专门安全人员可能不会出现在所有位置。例如，分支机构通常依赖单个人或一个小团队来负责包括安全事件日志管理在内的所有任务。
最后，大量的事件也是一个挑战。审核的安全事件的事件日志记录数据量要远远多于其他类型的事件日志记录的数据量。收集的事件数使得有效保留和查看日志变得非常困难。而且，目前的规定和拟议的规定都要求保留此信息，因此并无助于减少当今计算基础结构中的这一负担。
以前，审核访问信息可能被归纳为希望知道和试图确保安全。现在，组织以及组织的高级管理人员对信息的泄漏或缺少适当的保护负有法律责任，因此 IT 管理员熟悉可能适用于其环境的各种规定就显得尤为重要。对于全球性的公司，挑战会更为严峻，因为每个国家都有自己的信息和保护规定。在图 1 中列出了一些现有的规定符合性法规示例，还列出了 IT 组织的一些期望。
Figure 1 法规以及它们对 IT 专业人员意味着什么 (Close Figure 1)

法规 | 期望
2002 年的“萨班-奥西利法案”(SOX) | 第 404 节承认信息系统的角色并要求上市公司每年对财务报告的内部控制情况进行一次复查。
健康保险可携性与责任法案 (HIPPA) | 致力于有关健康数据的安全和隐私；“安全规则”涵盖该数据的管理、物理和技术方面的保护。
电子发现 (eDiscovery) | 定义文档保留和访问的标准，包括确定文档访问人员的范围和访问方式。
2002 年的“联邦信息安全管理法案”(FISMA) | 联邦要求为美国政府体系提供全面的“信息安全”(INFOSEC) 框架，与各种法律执行机构进行协调，建立对商业产品和软件功能的控制和承认机制。第 3544 节涵盖机构的职责（包括 IT 控制）。
联邦信息处理标准 (FIPS) 发布 200 | 指定联邦信息和信息系统的最低安全要求，并概述了在 NIST Special Publication (SP) 800-53 中找到的建议用法。在 NIST SP800-53 的第 AU-2 节 (Auditable Events) 中，指定信息系统必须能够将审核记录从多个组件编译到系统范围内与时间相关的审核追踪中、能够由单个组件管理审核的事件，并能够确保组织定期复查可审核事件。
考虑到所有这些法律压力，IT 专业人员需要做些什么？IT 经理和技术人员需要构建清晰简练的情节并将其提供给组织内部和外部的人员。这包括制定正确的审核策略（需要事前评估和投资）。此处的关键概念在于，审核不能像常见的那样可以事后进行设计。
此类 IT 挑战通常可通过人员、过程和技术的组合加以解决。对审核而言，它就是过程。因此，第一步应掌握基础知识，以便能够响应组织对规定符合性的需要和要求。我们首先介绍 Windows 中有关审核的一些基础知识，然后再深入研究 Windows Server 2008 和 Windows Vista® 中的变更。

审核安全事件
所有审核事件都记录在 Windows 安全事件日志中。这些事件通常都是无法立即对其采取操作的，实际上它们一般都属于信息性内容。对所发生的每个特定类型的访问，每个事件都记录一个简单的“审核成功”或“审核失败”。这不同于那些应用程序或系统事件日志，它们可通过彩色编码来识别问题（提示：可通过查找红色事件来追踪问题）。
安全事件日志与此完全不同，因为审核的事件通常被其数量所掩盖，并且如前所述，安全数据的关联可能会带来重大的挑战。即使是单一系统上的简单数据破坏也会成为问题。此时可能需要对安全事件日志加以分析，以确定哪个帐户被用来访问该数据，这就需要管理员回溯查看整个日志以尝试找到该帐户。遗憾的是，当今一些较为复杂的攻击通常是协调、分散的，这使得受害者在进行此类分析时非常困难。
也就是说，了解使信息能够记录在 Windows 的安全事件日志中的以下关键要素非常重要：“审核策略”和“系统访问控制列表”(SACL)。对于本地计算机而言，“审核策略”是可以通过“组策略”或“本地安全策略”进行配置的设置，可定义特定访问类型的成功和失败事件集合。以下主要“审核策略”类别在 Windows 中已存在多年（稍后在 Windows Server 2008 的新“Granular Audit Policy”中还会介绍更多策略）：
  • 审核帐户登录事件
  • 审核帐户管理
  • 审核目录服务访问
  • 审核登录事件
  • 审核对象访问
  • 审核策略变更
  • 审核权限使用
  • 审核过程跟踪
  • 审核系统事件
通常大多数 IT 组织都非常了解定义“审核策略”的需求以及这些相关的类别，但是“审核策略”只代表其中一部分解决方案。SACL 在实现全面审核计划方面也扮演着一个重要角色。两个特定的“审核策略”类别（审核目录服务访问和审核对象访问）完全取决于 SACL 在安全事件日志中返回的信息。那么 SACL 究竟是什么？
每个对象（文件、注册表或目录服务）都有一个“访问控制列表”(ACL)，其中包含一个或多个被分为以下两种类型的“访问控制项”(ACE)：“随机访问控制列表”(DACL) 和 SACL（后者定义的设置会记录试图对安全对象进行的访问）。SACL 中的每个 ACE 都指定了应记录在安全事件日志中的特定托管人的访问尝试类型。ACE 用来定义对指定对象的成功和/或失败的访问尝试记录。图 2 显示的是对某个对象使用 SACL 以生成特定访问类型的事件。
图 2 对某个对象使用 SACL
图 2 对某个对象使用 SACL
了解“审核策略”与 SACL 之间的关系至关重要，因为在涉及环境中的变更时，需要通过配置来捕捉“正确”的审核事件。如前所述，“审核目录服务访问”和“审核对象访问审核策略”只允许在安全事件日志中针对那些特定类别生成审核，如果某个对象在其 SACL 中配置了审核 ACE，则只生成事件。当这些条目准备就绪后，安全事件将由 Windows 本地安全机构 (LSA) 生成并被写入安全事件日志。
事件由两个截然不同的区域组成：标头 - 它是静态的，预先为每个事件标识符（事件 ID）都做了定义；正文 - 它是动态的，不同的事件包含不同的详细信息。图 3 显示了 Windows Server 2008 安全事件示例中的这两个元素。了解这些事件的组成对任意审核项目的分析阶段而言都非常重要，并且对于了解在各种工具（如 ACS）中如何返回信息也具有特殊意义。
图 3 审核事件的标头和正文
图 3 审核事件的标头和正文

Windows Eventing 6.0
现在我们已经了解了问题所在，那么 Windows Server 2008 是如何帮助组织应对这些挑战的呢？Windows Server 2008 是第一个包含新的 Windows Eventing 6.0 事件子系统的服务器版本，它极大地改善了安全事件管理的前景。请注意，虽然我们此处重点讨论的是 Windows Server 2008，但 95％ 的新功能集也存在于 Windows Vista 中。
对于 Windows Eventing 6.0，很多人的第一个关注点都会是全新的用户界面。新的“事件查看器 Microsoft 管理控制台”(MMC) 管理单元提供了出色的概述和摘要页面、灵活的自定义视图以及功能大大增强的说明文字。这些界面可帮助最终用户或系统管理员查找事件信息，并可直接从“事件查看器”配置重要的事件日志选项。
常常会影响到事件日志中的安全数据的一个关键问题是数据的保留。以前，“事件日志”子系统（包括所有日志）会面临可伸缩性限制。如果超过了这些限制，整个子系统将停止记录事件。但在 Windows Eventing 6.0 中则不然，组织现在只受可用磁盘空间数量的限制。不过要注意，过大的事件日志分析起来可能会非常麻烦，因为每个单独的日志条目在过滤时都必须进行评估，因此您可以干脆将日志保持在可管理的大小。
当然，这仍允许 IT 管理员为许多系统的事件日志制定存档计划。为了在本地服务器级别对此提供帮助，在 Windows Eventing 6.0 中新增了一个功能，即选项“日志满时存档日志而不覆盖事件”。在先前版本的 Windows 中，此选项只能通过修改 AutoBackupLogFiles 注册表值直接进行设置。尽管这提供了一种在本地存档日志的机制，但是它并未提供随时间推移来管理这些文件的解决方案，也未解决跨多系统时出现的聚合问题。“审核收集服务”没有为此提供完整的解决方案，我们过一会儿将谈到这一点。
新的界面只是一个开始。Windows Eventing 6.0 真正强大的功能在于新的 Windows Event Log 服务和底层的基于 XML 的引擎。这些组件提供了增强的可伸缩性、可访问性和各种管理选项。事件现在以灵活的 XML 格式进行存储，允许用户自定义解决方案，无缝地植入此信息。
Windows Eventing 6.0 还提供将管理操作与特定事件相关联的能力。这是通过将 Windows Event Collector 服务与 Task Scheduler 相集成，从而提供基于任务的事件记录功能来实现的。这是 Task Scheduler 的一个新范例，以前它只能基于时间来触发事件。“Attach Task to this Event”（将任务附加到此事件）向导（位于 Windows Server 2008 Event Viewer 中，可在任意事件的上下文菜单中找到）为启动程序、发送电子邮件或显示在任意时刻记录的特定事件的消息提供了一种简便的方法。当尝试确定在环境中发生的独立于特定安全事件的特定操作时，此功能可能会非常有用。例如，如果要审核在域控制器上对“Schema Update Allowed”注册表项所做的变更，您可以创建一个任务，当此注册表项被修改时向指定的安全管理员发送一封电子邮件来通知他们。
除了收集和存储大量事件条目这一新功能外，您现在还可以更加灵活地控制要在事件日志中记录的事件。这是通过一个名为 Granular Audit Policy (GAP) 的新功能完成的。在以前版本的 Windows 中，九个主要审核类别常常会导致事件超载。这些顶级类别现在可通过 50 个精细子类别加以控制，每个都代表事件的一个相关子集。
这样就可以从事件日志中过滤出非关键信息，而不会在类别级损失可视性。例如，如果在特定系统上只想监视对注册表而不是对文件系统的变更，以前只能选择只报告“对象访问”类别中成功或失败的项目。利用 GAP，您现在可以过滤出各种子类别（如“文件系统”、“认证服务”以及“文件共享”），并且可以只报告在“注册表”子类别上发生的事件。要了解 Windows Server 2008 系统中 GAP 子类别的内容，必须从提升的命令提示符下运行 Auditpol 命令。要列出可用的 GAP 子类别，请键入以下内容：
auditpol /list /subcategory:*
要获得您的系统中已配置的 GAP 子类别的列表，请键入：
auditpol /get /category:*
请注意，GAP 不能通过标准的“组策略”用户界面进行配置，必须通过 auditpol.exe 进行管理。在 support.microsoft.com/kb/921469 上的知识库文章中，介绍了在 Windows Server 2008 和 Windows Vista 系统中如何通过“组策略”来部署设置的指导原则。
Windows Server 2008 还可以在安全事件日志中捕捉特定类型的新值和旧值。在以前版本的 Windows 中，审核子系统只记录变更过的 Active Directory® 对象属性名称或注册表值，而不记录属性的以前和当前值。此新功能适用于 Active Directory Domain Services、Active Directory Lightweight Directory Services 和 Windows 注册表。通过在“注册表”或“目录服务变更”子类别上启用“审核成功”或“审核失败”并设置关联的 SACL，详细事件将出现在这些对象的操作事件日志中。这可以使用以下 auditpol 命令来执行：
auditpol /set /subcategory:"Registry" /success:enable
auditpol /set /subcategory:"Directory Service
    Changes" /success:enable
对于注册表变更，这些将显示为 Event ID 4657 事件，如图 4 所示。
图 4 注册表变更前后
图 4 注册表变更前后
此功能在尝试跟踪 Active Directory 对象的变更时尤为有用。对于“目录服务变更”，这些变更出现在一对 Event ID 5136 事件中，如图 5 所示。每个事件在事件正文中都有目录服务“对象”、“属性”和“操作”。对于针对包含现有数据的属性的变更，可看到两个操作：“值已删除”和“值已添加”。对于未填充的属性，在将数据写入到该属性时只能看到“值已添加”操作。例如，当针对某个用户对象（如 telephoneNumber）的属性成功执行了修改操作后，Active Directory 会在详细的事件日志条目中记录属性的以前和当前值。
图 5 “目录服务变更”事件前后
图 5 “目录服务变更”事件前后
如果创建了一个新对象，则在对象创建时所填充的属性值将被记录下来。如果在域内移动对象，则以前的位置和新位置（以可分辨名称的形式）将被记录下来。在设置了相应的“审核策略”后，默认会启用“old and new”（旧与新）功能。如果您希望将某个属性保持专有，如雇员 ID 号的变更，可通过对架构进行简单的修改来明确排除这些属性。如果在架构中将该属性的 searchFlags 属性改为 0x100（值 256 -NEVER_AUDIT_VALUE），如图 6 所示，则当该属性发生变更时，“目录服务变更”事件不会发生。
图 6 从目录服务变更中排除属性
图 6 从目录服务变更中排除属性
最后，Windows Eventing 6.0 中一个非常不错的新功能是“Event Subscriptions”（事件订阅）。正如先前所述，访问和查看事件日志是一项非常重要的系统管理任务。新的“事件订阅”功能提供了一种方法，可在系统之间直接转发事件。“事件订阅”由收集事件的“事件收集器”和被配置为向指定主机转发事件的“事件源”组成。消耗事件的能力由 Windows Event Collector 服务（Windows Eventing 6.0 的新功能）提供，而订阅功能则被内置在 Windows Event Log 服务中。用户可以配置一个收集器，从各种事件源中收集事件，这里所说的事件源可以是 Windows Server 2008 或 Windows Vista 系统。
从事件源收集的所有数据都驻留在离散的名为 Forwarded Events (ForwardedEvents.evtx) 的事件日志中，并由收集器上的 Event Log 服务进行管理。对两个端点（收集器和源）的配置都是必不可少的，此操作可以自动进行（源上为 winrm quickconfig –q；收集器上为 wecutil qc /q）。要特别注意的是，此事件订阅功能不是为企业设计的，也不是要将事件提供给外部数据库的替换系统。
为了说明如何使用此功能，让我们假定有一个小 Web 场。您有一小组与特定网站（包括 Web 服务器和 SQL 服务器）关联的系统。这些系统可使用新的“事件订阅”功能，将其安全事件日志信息合并到单个系统中。环境规模越大，通常需要的事件日志合并工具集也越高级。

审核收集服务
考虑到 Windows Server 2008 的所有新功能，长期管理和存档安全事件日志信息的实际解决方案是使用集中数据库来存放审核信息。“审核收集服务”是 System Center Operations Manager 2007 的一项核心功能。ACS 为转发、收集、存储和分析安全事件数据提供了一种机制。安全事件几乎是以实时的方式收集的并随后存储在中央 SQL 存储库中。利用 ACS，组织还可以为访问审核信息提供最低的权限，因为这不需要对实际审核的系统进行物理访问。让我们看一看 ACS 是如何工作的。
ACS 由三个主要组件组成。首先有一个“转发器”，它是“操作管理器”代理的一部分，可将事件日志数据从客户端传递到 ACS 基础结构。转发器将数据传递到第二个组件，即“收集器”，它是服务器端的侦听器。ACS 转发器通过 TCP 端口 51909 进行连接，它们以安全的方式与指定的“收集器”进行通信。在传输之前，事件日志数据通过规范化操作被转为 XML 格式，这意味着多余信息被去除，事件信息基于事件特定的标头和正文信息被汇总到映射字段中。信息到达收集器后，将被发送到第三个也是最后一个组件中，即 ACS 数据库。这将成为长期存储安全事件信息的存储库。在存储完毕后，可通过 SQL 查询直接对信息进行挖掘，也可使用 SQL Server® Reporting Services 以 HTML 报告的形式加以呈现。ACS 提供三个默认视图，如图 7 所示。
Figure 7 ACS 视图 (Close Figure 7)

ACS 视图名称 | 用途
AdtServer.dvHeader | 所收集事件的标头信息。
AdtServer.dvAll | 所收集事件的标头和所有正文信息。
AdtServer.dvAll5 | 所收集事件的标头和正文信息的前五个字符串。
从性能角度看，单个 ACS 收集器每秒可处理的峰最大值是 100,000 个事件，每秒可处理的连续最大值是 2,500 个事件。出于计划目的考虑，单个 ACS 收集器最多可支持 150 个域控制器、3000 个成员服务器或 20,000 个基于默认“审核策略”设置的工作站。在一个真实的测试方案中，大约 150 个域控制器每秒显示了最多约 140 个事件，每小时峰值平均值为 500,000 个事件。在仅仅 14 天后（ACS 的默认保留设置），就有超过 150GB 的安全事件数据被存储到了 SQL 服务器数据库中。更具挑战性的“审核策略”和关联的 SACL 配置会明显生成更多的数据（每小时、每天以及全部时段）。
重要的一点是要认识到，面对如此数量的数据，没有人能够在典型的大型企业环境中查看每个事件。但是，组织不应对此处出现如此多的数据感到恐惧。了解在环境中所发生的变更是以分析大量数据为代价的。
这就是 ACS 的优势所在。通过 SQL Server Reporting Services 和 ACS，您可以将通常隐藏在安全事件日志背后的问题转换为一些易于识别的问题，就像应用程序事件日志中通过彩色编码来识别事件一样。ACS 包括一组默认报告，根据环境的特定需求来扩展这些报告是一件非常简单的事情。
以下面的方案为例：由于在环境中对外部信任问题非常敏感，因此管理层要求制定一份报告，详细说明 Active Directory Trusts 的创建过程。在进行了一些研究后，我们了解到 trustedDomain 对象是在创建信任时，在 cn=System 容器中创建的，而此容器位于 Active Directory 的特定域命名上下文中。在此容器中编辑 SACL 以审核成功创建的任何 Trusted Domain 对象后，我们即可在每次创建此类型的对象后捕获安全事件。在执行信任创建的 DC 上，它将显示在安全事件日志的 566 事件中。我们然后可以编写一个简单的 SQL 查询，从 ACS 中检索此信息：
select * from AdtServer.dvAll
where EventID = '566' and
String05 like '%trustedDomain%'
order by CreationTime desc
要将此信息添加到报告中，可使用 SQL Server 2005 Reporting Services 中所包括的 Visual Studio® 2005 版，它是专为制定报告提供的。完成向导后，您很容易就可以创建出与图 8 中的报告非常类似的报告。而且，可能出现在安全事件日志中的任何环境变更都可以被汇总到类似的全面报告中。
图 8 ACS 报告示例
图 8 ACS 报告示例

制定审核计划
现在我们已经了解了在审核时所面临的挑战和在法律和技术方面的问题，那么 IT 管理员该如何开始为其组织制定“审核计划”呢？与大多数事情一样，制定全面的审核策略是一个多步骤过程。第一步是确定要审核的内容。这包括对环境进行分析并确定哪些类型的事件和变更需要生成审核。这可以包括一些简单的项目（如帐户锁定、敏感组变更、信任创建等），也可以包括复杂的变更（如修改所在环境中的应用程序内的配置元素）。此处的关键在于管理层必须参与确定审核计划中都需要有“什么”。此练习需要书面完成并应定期重复，而不是在发生重大意外事件以后再执行。
第二步是确定涉及特定变更的审核信息如何以安全事件的形式返回。审核信息有时比较难懂并且易读性较差。在实施之前，必须在安全事件和各种操作之间建立关联，以了解安全事件的真正涵义。不能在意外事件发生后再来确定事件与操作的关系。
第三步是指当这一切准备就绪时，即当您实施“审核策略”和 SACL 时。正如前面所讨论的，您需要在目录、文件系统和注册表中定义“审核策略”设置（以允许生成安全事件）和 SACL（为关联的操作生成审核追踪），以获得在这些领域中对变更的完整描述。
接下来是第四步，也是最后一步，即收集、触发和分析。根据组织规模和需求的不同，这些可能会涵盖在 Windows Server 2008 的固有功能中，也可能涵盖在一些高级解决方案中，如 System Center Operations Manager 的“审核收集服务”功能。大多数组织所犯的一个常见错误是只设置“审核策略”而不定义 SACL。最后一步是实施技术解决方案，向组织中的负责人报告和共享数据。如前所述，大多数组织已建立了负责安全的实体，因此需要围绕有待提高效率的现有组织元素来构建审核计划。这最后一步的关键是要以有意义的方式收集信息并将其提供给那些负责了解环境中所发生变更的所有实体。
大多数 IT 组织现在已不只是仅考虑一个全面的审计计划，而是实际需要这样的计划。与先前的平台相比，Windows Server 2008 为收集和分析安全事件数据提供了增强的机制。先进的收集和报告技术（如 ACS）使过去因事件数量和分布原因而晦涩难懂的问题变得明朗起来，使这些变更立刻变得一目了然。
与大多数 IT 问题一样，过程是主要的挑战。必须通过更多的配置和分析才能捕捉到 IT 经理的预期目标，因此要想从容应对这些挑战，必须深入了解环境的要求和 Windows 平台的功能。祝您成功。

Rob Campbell and Joel Yoker Rob Campbell 是 Microsoft Federal 团队的高级技术专家，而 Joel Yoker 在其中担任高级顾问。Rob 和 Joel 均专注于为美国联邦政府客户开发和部署安全解决方案。


 编辑寄语: Windows Server 2008 登场
编辑寄语
Windows Server 2008 登场

每时每刻都有新产品发布。 如果您拥有数百种产品（如果 Web 的话，实际上可达到数千种），则产品发布这一概念将变得极其普通。但这次不一样。
今年二月，Microsoft 标志性地发布了 Windows Server 2008，再没有比这更激动人心的事情了。毫无疑问，本次发布经历了太长时间的等待，但我相信您会发现所有的等待都是值得的。重大改进的数量以及大量的新功能都会令您惊叹不已。我们当然会讨论 IIS 7.0（确实要讨论）或网络访问保护（也会讨论此内容）。我们还可能介绍服务器管理器、新的部署技术或新的遵从性功能（检查、检查、再检查）。嘿，要列出来的东西还多着呢，但实话告诉您，此新版本最震撼我的地方是在改善 Windows Server 的可管理性方面所做出的大量努力。
如何能使 IT 专业人员更加轻松是我们关注的焦点。因此，能看到一款产品如此注重于帮助 IT 专业人员更好地完成其工作确实非常令人满意。以 Windows Server 2008 中新的事件记录基础结构（Rob Campbell 和 Joel Yoker 会在本月期刊中进行讨论）为例。事件记录会我们当中最难缠的家伙也望而生畏，但我不得不告诉您，新版本中这一功能的变化令我折服。XML 数据、自定义视图、更加详细的说明、更加简单的报告......简直多得难以例举。
认真地说，此版本对于业务基础方面的重大改进已足以令人激动不已。加上对 Active Directory、IIS、网络连接、安全性、虚拟化以及其他方面的功能增强则使得此版本成为历史上最重要的一次产品发布，因此我们本期将专门介绍您需了解的有关 Windows Server 2008 的所有事宜。
并且作为特别优待，我们非常荣幸地欢迎 Mark Russinovich（他是平台和服务部门技术人员及始终广为流行的 Sysinternals 工具的创建者）的归来。Mark 已为《TechNet 杂志》撰写了许多极具影响力的文章，其中最著名的是“深入了解 Windows Vista 内核变化”系列（刊载于 2007 年 2 月、3 月、4 月期刊上）。Mark 将在本月继续该系列的讨论，以让您对 Windows Server 2008 内核的变化拥有更加深入且技术性的了解。好好体验吧！
—Joshua Hoffman

衷心谢谢以下 Microsoft 技术专家：Brandon Baker、Mai-lan Tomsen Bukovec、Bryce Cogswell、Nils Dussart、Gregoire Guetat、Brett Hill、Gaby Kaplan、Jason Leznek、Paul Mayfield、Nathan Muggli、Meg Muran、Michael Murgolo、Michael Niehaus、Raja Perumal、David Solomon、Eric Traut、Jim Truher 和 Landy Wang。


 读者来信: 读者心声
读者来信
读者心声

Windows Vista 完整 PC 备份
多谢您在 2007 年 9 月刊上发表的那篇好文章，里面介绍了 Windows Vista® 完整 PC 备份（Windows Vista 备份技术指南，地址是 technetmagazine.com/issues/2007/09/Backup）。我没有实际试用这一技术，但其中提到了在哪里放置备份映像这一问题，并指出应该将它放在外部硬盘上（我也偏好这种方式）。但并没有将文件放置在外部硬盘的哪个具体文件夹中的相应选项，因此我担心会不会覆盖我硬盘上已有的所有其他文件。这会带来问题吗？
—Ben B.

我们将您的问题转给了作者 Christine Fok，作者说完整 PC 备份实际上会在目标硬盘上创建一个文件夹，用于存储映像，所以不必担心，不会覆盖任何数据。

错误注册表项引用
2007 年 12 月的文章“跟踪难以捉摸的网络问题”(technetmagazine.com/issues/2007/12/Network) 在引用负责调整 Windows® TCP/IP 堆栈注册表项时，出现一个小小错误。在第 70 页，作者 Christopher Stoneff 提到您可以调整注册表项 HKLM\System\CurrentControlSet\Services\TCPIP 中的值，实际上正确的项是 HKLM\System\CurrentControlSet\Services\TCPIP\ Parameters（他一定是遗漏了 "Parameters"）。
—Ingmar K.

Christopher Stoneff 确认您的意见是正确的。该注册表项应该在末尾加上 \Parameters。抱歉我们漏了注册表路径的一个必需部分。在该文章的在线版本我们已做了更正。

加密文件
我很想学习加密文件系统 (EFS) 的更多知识，并拜读了 2007 年安全观察专栏中的“部署 EFS：第 2 部分”(technetmagazine.com/issues/2007/03/SecurityWatch)。我有一个域环境，并且某些用户已经对一些文件进行了加密。随后我引进了证书颁发机构 (CA) 和 EFS 模板。我的问题是：如果那些使用自签名证书加密文件的用户需要加密新文件，他们是使用旧的自签名证书加密还是向我的 CA 注册一个新证书？另外，如果我的所有用户都有漫游配置文件，那么在哪里存储用户的私有密钥？
—Ammar H.

John Morello 是部署 EFS 这一专栏的作者，他对此问题的回答是：
一旦用户注册了新的 EFS 证书，执行新操作时就会开始使用新证书。但是，所有已加密的现有文件在其更新前，仍使用旧密钥对加密。因此，在用户注册后，您可运行 cipher /u，它会使用新密钥对更新所有这样的文件。
如果使用漫游配置文件，密钥对将漫游至配置文件中。我建议使用凭据漫游，它比漫游配置文件要简约。在此查看详细信息：go.microsoft.com/fwlink/?LinkId=107469。

错误的正则表达式
2008 年 1 月的“您好，脚本专家！”专栏文章“这里没有错误的正则表达式”(technetmagazine.com/issues/2008/01/HeyScriptingGuy) 中，使用
objRegEx.Pattern = "[^A-Z][^a-z]"
的示例可能不是想用的那个。文中的意图是要查找任何不是小写或大写字母的字符。示例中的样式针对的是大写字母后接一个小写字母。遇到 "aBcde" 这类字符串时表达式就会失败。可能应该使用以下示例：
objRegEx.Pattern = "[^A-Z^a-z]"
—Roger R.

我们将您的问题转给了脚本专家，以下是他们的答案：
您好，Roger。非常感谢您指出的问题。好象是我们曾经做了更改，但没有更正这个问题。在原来的草稿中（还存在我计算机的某个角落中），我们确实想查找大写字母后接一个小写字母。我们一定是后来决定这个示例不如查找不是字母的字符，我们更改了文字，但没有更改示例代码。在该文章的在线版本我们已做了更正。很抱歉。


 工具箱: 面向 IT 专业人员的新产品
工具箱
面向 IT 专业人员的新产品
Greg Steen

管理 SQL 数据库
SQL Sentry Event Manager
sqlsentry.net/event-manager/standard-sql-server.asp
基础结构越大越复杂，就越需要关注彼此间相互影响的维护和操作任务。它可能会严重破坏最终用户的正常流程。幸运的是，许多工具都可帮助数据库和系统管理员协调复杂环境的调度工作。
其中一种可用于多数据库服务器环境的工具是 SQL Sentry Event Manager，它是一种在后端使用 SQL Server® 2000 或 SQL Server 2005 实例的 Microsoft® .NET Framework 服务器应用程序。可通过 SQL Sentry 控制台 UI（它让您对环境中的托管服务器有共性的认识）连接到服务器应用程序。服务器应用程序不用代理，但这通常也意味着它需在特定用户上下文中运行，即，用户要有权连接要管理的计算机和服务。
此应用程序最受青睐的功能之一在于控制台 UI 可以通过拖放服务器任务来实现重新调度，因而有助于协调维护和操作活动以避免冲突和停机。虽然开始时该 UI 似乎有点让人费解，但它能够让您很快地发现潜在问题，并找出一个合适时间段来转移冲突任务。它甚至还可针对要监控服务器的 SQL 代理作业和 Windows® 计划任务提供类似 Microsoft Outlook® 的视图。并且，日历视图还可以突出显示长期运行且失败的任务，以帮助您全程跟踪和解决问题。
除调度功能外，SQL Sentry 还具有强大的通知系统，它可以取代 SQL Mail、MAPI、xp_sendmail 或 sp_send_dbmail。它还可以通过其子系统路由来自托管服务器的所有事件通知，以让您集中控制这些通知的类型、频率和分发。
可在全局、服务器以及任务或作业级别配置通知，因而满足了大部分管理员对于此类事件所要求的精细程度。可设置许多不同类型的事件条件来触发通知，如当完成工作所用时间过长或过短时，当性能指标（如 CPU 使用率）达到特定阈值时或者当 SQL 代理作业由于某些原因被阻止时。还可对 SQL Sentry 进行配置以在配置发生更改时通知您，这样您就可了解某人何时调整了时间表、暂停了监控器等。
但是，SQL Sentry 能处理的不只是 SQL 代理作业和 Windows 任务计划程序事件。此应用程序还支持来自维护计划、DTS 程序包、SSIS 任务和 SQL 代理日志的事件。
领导们通常都喜欢了解系统的运行情况，如果您觉得自己管理下的正常运行时间评级值得骄傲，那您很可能非常乐意把它拿出来炫耀一下。SQL Sentry 中内置有许多报告选项正好可用于此类任务，可使用它们来生成和打印运行时间和性能统计图表。还可将报告数据导出为 XML、CSV 或 HTML 格式以放到您的报告文档和工具中。
请注意：Professional Edition 增加了管理 Oracle 服务器的功能，同时还提供诸如报告服务监控、SQL 代理作业队列、链接非 SQL 服务器事件和计划共享资源等功能。

价格：Standard Edition 起价 395 美元。
利用 SQL Sentry 安排维护
利用 SQL Sentry 安排维护

远程管理系统
Mobile Admin
rovemobile.com/products/ma/features
由于分身乏术，所以对于管理任务繁杂的 IT 专业人员来说，移动远程服务器管理工具是个不错的选择。值得推荐的一款产品是 Rove Mobile（以前的 Idokorro Mobile）所出品的 Mobile Admin。
Mobile Admin 是一个客户端服务器程序，通信服务器（有权访问要管理的服务器）通过该程序与一组无线手持设备交互。此应用程序的服务器端为无代理形式，即意味着不需在要管理的服务器上安装任何程序。但是，您必须向该机器和应用程序上下文提供适当的远程管理权限，这样您才能管理基础结构中的所有机器。
大多数主流移动平台（包括 Windows Mobile® Pocket PC 和智能电话以及 BlackBerry 智能电话）都可访问服务器。此外，具有兼容浏览器且连接到 Internet 的所有计算机都可以连接到 Mobile Admin（前提是您的安全策略已设置为允许这一连接）。
所有系统或网络专业人员对于移动管理的首要顾虑之一都是安全性。如果部署了 BlackBerry Enterprise Server，可选择使用 TDES（三重数据加密标准）或 AES（高级加密标准）来加密所有通信，这两种标准都符合联邦信息处理标准 (FIPS)。
而且，Mobile Admin 还扩展了 BlackBerry 发生丢失时的“查杀”功能，该功能可远程删除电话中的软件和数据。对于其他手持设备，可实现 VPN 来确保通信安全，和/或将 Mobile Admin 配置为使用 Windows 登录、LDAP、RSA SecurID、RADIUS 身份验证或 Mobile Admin 专用登录。
一旦建立连接，即可执行各种 Windows 管理任务，如查看和清除事件日志、重启机器、管理文件和目录以及查看和编辑计划任务。
对于 Active Directory® 集成，可查看、创建、编辑、禁用或删除用户、组和计算机。同时，对于 Exchange 管理，可更改邮箱设置、冻结和解除冻结消息队列以及其他更多功能。
通过利用 IIS，可重新启动应用程序池或 Web 站点，并更改虚拟目录设置。对于 SQL 服务器，可运行 T-SQL 查询、修改登录以及开始和停止 SQL 代理作业。如果正在运行群集服务，还可以移动组、使资源离线以及在其他常见管理任务间执行故障转移。
最后，Mobile Admin 还支持管理 Oracle、Novell LDAP、Lotus Domino、Citrix、HP iLO、Backup Exec 等等应用程序。

价格：起价为每台服务器 245 美元。

书评
《Mastering Windows Network Forensics and Investigation》
sybex.com
您可能已具备检测和规避网络威胁的硬件和程序。但您是否了解或已经具备在发生安全事件后调查甚至起诉攻击者所需的程序或协议？
而这正是《Mastering Windows Network Forensics and Investigation》(Sybex, 2007) 一书所要介绍的内容。该书旨在向您传授调查各种 Windows 网络入侵的所有技巧，无论是小规模、单个机器事件（如公司服务的不恰当使用）还是对敏感系统的更大更广泛的攻击。
该书详述了收集证据的整个过程，涵盖了从面对面会谈到跟踪审核事件和日志的方方面面。它介绍了使用 WireShark、LogParser、EnCase 和 SysInternals 工具集之类的工具来从 Windows 机器和网络中收集证据的位置和方法。
此外，本书探究了可从发生故障机器的注册表、文件系统结构和目录、基于文本的日志、事件日志和进程获取的信息。它还介绍了如何创建实时分析 CD（它包含跟踪所需证据的工具）。最后，本书讨论了如何在法庭上提交调查结果以及举证的详细指导原则和过程。

价格：59.99 美元。

收集系统数据
MetaLAN
hammer-software.com/metalan.shtml
集中管理是实现成功系统管理的关键要素之一。它可以消除许多运行方面的问题并为您节省出许多宝贵时间，从而减轻您的工作压力。
Hammer Software 公司出品的 MetaLAN 就是一款可帮助您管理和支持 Windows 网络中的用户和服务器的工具。这款无代理的应用程序能够快速收集相关信息、更改配置并对您的 Windows 机器实施常规管理。当然，需拥有必要的用户上下文和权限才行。
MetaLAN 有两种工作模式。可直接在管理员模式（该模式可以连接到要查询或修改属性的机器）下运行，或者在远程机器上使用免费的加载项代理/服务（称为 ProbeServer）同时在服务器模式下运行 MetaLAN 来持续监控您的工作站。
启动应用程序即可进入 MetaLAN 控制面板 UI，可利用它来检查要管理域的当前网络。还可在此处启动各种工具组件，如 Help Desk Tool、Report Tool、Software Tool 和 RegCast Tool。
Help Desk Tool 提供所管理域内机器的搜索和浏览视图。选中某台计算机即会显示关于该机器的一组有用信息，包括制造商、IP 地址、处理器、驱动器、MAC 地址和服务器角色。此时，可运行 Windows 管理规范 (WMI) 查询、连接到实时性能监控器、查看已安装的软件以及执行其他有用的管理任务。
Report Tool 可快速提供托管节点的可导出式图形化视图。例如，可针对网络中所有机器的 CPU 速度生成一张饼图，或者确认哪些机器安装了 Windows XP Service Pack 2。
可利用 Software Tool 来快速查看并导出网络中的 1 台到 N 台机器上已安装软件的列表 — 它是一个不错的审核工具。
可利用 RegCast Tool 来查看（如果您是域或企业管理员，则还可以修改）选定机器组中远程机器上的注册表信息。
MetaLAN 还包括一个用于远程部署和安装 Microsoft Installer (MSI) 程序包（如果支持无提示安装）的工具；显示机器上每个驱动器以及其可用剩余空间的 Storage Overview；可用来开始、停止甚至删除服务的 Service Admin 工具。如果这还不够，还有一款非常酷的虚拟网络计算 (VNC) 远程控制工具，它可以推送一个很小的 VNC 可执行程序，通过执行该程序即可远程控制机器（非常类似远程协助）。

价格：一个 20 个节点的许可证起价为 75 美元。
Help Desk Tool 可提供搜索和浏览视图
Help Desk Tool 可提供搜索和浏览视图

自动化任务
AutoHotkey
autohotkey.com
自动化是 IT 专业人员最好的朋友，它可帮助他们避免执行一些耗时且重复性的任务。AutoHotkey 实用程序即是可帮助我们获得这种能力的众多工具当中的一种。这款免费且开源的工具可帮助简化桌面日常事务，因为它可以自动化需要键盘、鼠标甚至是操纵杆输入的几乎所有任务。它是在 steroid 上运行且基于脚本的一个热键和宏工具。
AutoHotkey 显示在系统任务栏中，并且在启动时，它会执行事先创建好的脚本定义。此程序按其在脚本文件中显示的样式执行各脚本命令。例如，它非常适合用于实现在启动时运行您最喜欢的应用程序这一功能。不过，请等一下，还有其他功能：还可定义任意数量的热键和快捷字符串。
热键（也称快捷键）是定义来触发某种操作的任意按键组合，如启用某个应用程序、将窗口显示在前台上或者甚至模拟鼠标滚轮操作。
而快捷字符串则是经常键入的命令或短语的文本缩写。此外，这些快捷字符串还可用于启动脚本操作，这一点与热键类似。例如，可用简单的按键序列“td”创建一个快捷字符串，用于打开 Microsoft Word 并以所需的格式写入当天的日期。或者，如果经常需要向用户发送一段特殊的文字响应，则可创建一个简单的快捷字符串来自动将该段文字写入到新的 Outlook 邮件中。
脚本语言本身支持变量、数学和字符串操作表达式、内置全局变量、函数、循环和条件语句，因此应该可以创建一个适合您的系统管理需求的脚本。总计有超过 100 条命令和语言结构可帮您完成各种任务。例如，可以模拟鼠标拖动、显示消息框、运行异步操作、发送电子邮件消息、修改注册表、在循环中设置计时器进行反复检查、打开应用程序、关闭窗口和关闭进程等等，这里只列出了很少的一部分。
AutoHotkey 的另一个很酷的功能是：在根据您的需求定制脚本后，即可编译这些脚本以便重用和分发。因此，未安装 AutoHotkey 的用户也可以利用您的快捷键和脚本。而且由于是开源项目，可无限制地分发或销售这些快捷键和脚本。
在组织内部，您可以轻松地向最终用户分发一个可执行脚本来执行一组自定义功能。如果没有这个脚本，您将不得不在桌面上手动执行这些工作。并且，如果需要为每位用户量身定制这些脚本，AutoHotkey 还支持命令行开关和参数，这样您就可以真正地得到一个既非常有用又可在整个域中重用的工具。
与许多文档深度欠佳的开源项目不同的是，AutoHotkey 的文档非常全面且逻辑清晰，它通过许多不错的实用示例来向您展示编写自动化任务脚本所需掌握的知识。此外，在项目网站上提供有一个用户论坛（可帮助您解决所有问题）以及包含脚本、教程和命令参考的 wiki。还有一个脚本示例页面，它提供了一组由用户贡献的可用脚本示例。

价格：免费。
AutoHotKey 可编译脚本以便重用和分发

Greg Steen 是一位技术专家和企业家，酷爱钻研技术。他总是在寻找各种新工具，以帮助 IT 专业人员更轻松地进行操作、问答和开发。


 实用程序特别推荐: Windows Server 徽标认证
实用程序特别推荐
Windows Server 徽标认证
Venkat Krishnamachari
下载这篇文章的代码: Works with Windows Server 2008 (KB)

通过 Windows Server® 2008 软件认证，Microsoft 正尝试帮助开发人员遵循最佳实践，并使 IT 专业人员能够在购买应用程序之前对其进行评估，从而节省时间并降低风险。为帮助客户衡量应用程序兼容性，Microsoft 提出了“Works with Windows Server 2008”计划，该计划包括一些免费的支持测试工具，可帮助您确保应用程序提供可预测的体验。
“Works with”工具通过监视文件系统、注册表、服务和驱动器的状态来收集应用程序在其生命周期中对 OS 的影响的相关数据。然后，该工具分析这些数据，并报告特定的测试案例成功和失败。“Works with”测试框架文档和附加工具可从 windowsservercatalog.com/ready 获得，它们提供了进一步的详细信息。这些工具应帮助 ISV 构建应用程序兼容性，同时使 IT 专业人员能够评估应用程序是否准备好在 Windows Server 2008 上部署。
要使用这些工具，请首先在测试计算机上安装最新版本的 Windows Server 2008、通过 windowsservercatalog.com/ready 下载“Works with”工具，并确保包含“应用程序验证器”工具。该工具的 GUI 具有四个简单功能：创建测试流程、恢复现有测试流程、查看测试结果以及创建提交程序包（用于 ISV 从授权测试供应商处寻求“Works with”验证）。
显示结果的文本报告
通过遍历应用程序的整个生命周期来创建测试流程：安装、配置、执行和卸载。“Works with”工具主要在后台运行，用于检验 OS 稳定性和安装程序兼容性，以及检验在给定平台的新安全性要求和其他可配置功能的情况下，功能是否正确执行。一般认为，最好完成测试流程并生成完整报告，这通常需要二至四小时。但是，您也可以停止测试流程、生成快速报告，以及在以后恢复测试。
测试完成后，您将得到每个测试案例的清晰红绿状态报告和详细结果，如屏幕快照所示。以绿色报告的测试表示兼容。对于红色结果，您可以查看日志文件以了解错误条件。请务必将本地生成的日志保存到其他计算机上，这样在清理测试计算机后仍可以参考它们。“Works with”工具运行于任何服务器应用程序上，它还可以评估为 Windows Vista® 而设计的客户端组件和管理工具。
如果您正在使用商业软件，则“Works with”工具可以帮助您规划已知兼容应用程序的迁移。您可以使用测试结果向供应商询问有关支持计划的信息，同时为开发人员节省时间，从而使其发现兼容性问题并为修补程序排定优先级。对于自定义应用程序，您可以为开发团队提供针对性极强的反馈。您还可以在新补丁发布时确认当前兼容性，并为 IT 部门提供文档化的应用程序配置数据。一些客户还使用这些工具来记录系统应用程序所接触的文件。
我们非常乐意听取您就如何改进测试案例或工具，以提高在您环境中的可用性而提供的反馈。请访问 wslogofb@microsoft.com。

Venkat Krishnamachari 从 2005 年起担任 Windows Server 软件认证的技术负责人，之前他在发布 SQL Server 2005 的团队中工作。


 网络专家: 使用 ISATAP 将您的 Intranet 迁移到 IPv6
网络专家
使用 ISATAP 将您的 Intranet 迁移到 IPv6
Joseph Davies
这篇文章基于 Windows Server 2008 的预发布版。文中的所有信息均可能发生变更。

对 Internet 协议版本 6 (IPv6) 的一个常见误解是：为了使用 IPv6，必须部署本机 IPv6 寻址和路由，而这需要对 IPv6 寻址方案、路由器更新和配置以及实施时间表进行深入的分析。虽然最终应针对本机
IPv6 连接完成这一操作，但您可以使用站内自动隧道寻址协议 (ISATAP) 轻松地部署隧道 IPv6 连接。通过隧道 IPv6 连接，支持 ISATAP 的主机可以使用由 IPv4 报头封装的 IPv6 通信进行沟通（IPv4 协议字段设为 41）。ISATAP 通信可遍历仅使用 IPv4 的 Intranet，因此您可以立即测试具有 IPv6 功能的应用程序，而无需等待本机 IPv6 基础结构的完成。
ISATAP 是在 RFC 4214 中定义的地址分配和自动隧道技术，它能够在仅使用 IPv4 的 Intranet 中提供 IPv6/IPv4 主机间的单播 IPv6 连接。ISATAP 主机使用分配了 ISATAP 地址的逻辑隧道接口，这些地址的格式为 UnicastPrefix:0:5EFE:w.x.y.z（当 w.x.y.z 是分配给 ISATAP 主机的私有 IPv4 地址时）或 UnicastPrefix:200:5EFE:w.x.y.z（当 w.x. y.z 是分配给 ISATAP 主机的公共 IPv4 地址时）。UnicastPrefix 为任意 64 位单播地址前缀，包括链接本地、全局和唯一的本地前缀。ISATAP 地址的示例如 2001:DB8::98CA:200:131.107.28.9 和 2001:DB8::98CA:0:10.91.211.17。

使用 ISATAP 将 Intranet 迁移到 IPv6
ISATAP 部署包含一个或多个逻辑 ISATAP 子网，这些子网是分配了 64 位 IPv6 子网前缀的仅使用 IPv4 的网络。在逻辑 ISATAP 子网上有 ISATAP 主机和 ISATAP 路由器。ISATAP 主机使用 ISATAP 隧道接口来封装 IPv6 通信。此通信可直接发送到同一逻辑 ISATAP 子网上的其他 ISATAP 主机。要到达位于其他 ISATAP 子网或本机 IPv6 子网上的其他目的地，必须将通信发送到 ISATAP 路由器。ISATAP 路由器是一个 IPv6 路由器，它将子网前缀播发给 ISATAP 主机，并在 ISATAP 主机和其他 IPv6 子网上的主机之间转发 IPv6 通信。图 1 显示了在一个简单的 Intranet 上 ISATAP 的组成部分。
图 1 仅使用 IPv4 和具有 IPv6 功能的 Intranet 部分
图 1 仅使用 IPv4 和具有 IPv6 功能的 Intranet 部分
ISATAP 允许您分三个阶段在 Intranet 上部署本机 IPv6 寻址和路由功能。
第一阶段：仅使用 IPv4 的 Intranet 在此阶段，您的整个 Intranet 可以是单个逻辑 ISATAP 子网。图 2 显示了具有 ISATAP 路由器的仅使用 IPv4 的 Intranet 示例，该路由器仅将全局或唯一的本地地址前缀播发给 ISATAP 主机。
图 2 仅使用 IPv4 的 Intranet
图 2 仅使用 IPv4 的 Intranet
第二阶段：仅使用 IPv4 和具有 IPv6 功能的 Intranet 部分 在此中间阶段，您的 Intranet 同时具有仅使用 IPv4 的部分（逻辑 ISATAP 子网）和具有 IPv6 功能的部分。具有 IPv6 功能的 Intranet 部分支持 IPv4，而且已更新为支持本机 IPv6 寻址和路由。您可在图 1 中看到此配置。
第三阶段：具有 IPv6 功能的 Intranet 在此最终阶段，您的整个 Intranet 同时支持 IPv4 及本机 IPv6 寻址和路由。请注意，此时不再需要 ISATAP。图 3 就是一个示例。
图 3 具有 IPv6 功能的 Intranet
图 3 具有 IPv6 功能的 Intranet
使用 ISATAP，可在 Intranet 从仅使用 IPv4 过渡到具有 IPv6 功能的前两个阶段期间提供主机和应用程序之间的 IPv6 连接。

Windows Server 2008 和 Windows Vista
Windows Server® 2008 和 Windows Vista® 使用的 IPv6 协议支持将 ISATAP 作为 ISATAP 主机和 ISATAP 路由器。对于安装在具有不同 DNS 后缀的计算机中的每个 LAN 接口，均有单独的 ISATAP 隧道接口。例如，如果运行 Windows Vista 的计算机具有两个 LAN 接口，而且它们都连接到相同的 Intranet 并且分配相同的 DNS 后缀，则只会有一个 ISATAP 隧道接口。如果这两个 LAN 接口连接到两个 DNS 后缀不同的网络，则将有两个 ISATAP 隧道接口。对于运行 Windows Server 2008 或 Windows Vista SP1 的计算机而言，除非名称“ISATAP”可以进行解析，否则 ISATAP 隧道接口将被置于媒体断开状态。
默认情况下，对于分配到相应 LAN 接口的 IPv4 地址，未安装服务包的 Windows Vista 所使用的 IPv6 协议会自动在 ISATAP 隧道接口上为其配置本地链接 ISATAP 地址（FE80::5EFE:w.x.y.z 或 FE80::200:5EFE:w.x.y.z）。
Windows Server 2008 和 Windows Vista SP1 所使用的 IPv6 协议仅当名称“ISATAP”可以解析时，才会在 ISATAP 隧道接口上配置本地链接 ISATAP 地址。
要接收来自 ISATAP 路由器的路由器播发消息，ISATAP 主机必须向 ISATAP 路由器发送路由器请求消息。在以太网子网上，本机 IPv6 主机发送多播路由器请求消息，随后该子网上的路由器将使用路由器播发消息进行响应。因为 ISATAP 不使用 IPv4 多播通信，也不需要具有 IPv4 多播功能的基础结构，所以 ISATAP 主机必须将路由器请求消息单播至 ISATAP 路由器。
要将路由器请求消息单播至 ISATAP 路由器，ISATAP 主机必须首先确定逻辑 ISATAP 子网上 ISATAP 路由器接口的单播 IPv4 地址。对于 Windows Server 2008 和 Windows Vista 所使用的 IPv6 协议，ISATAP 主机通过将主机名“ISATAP”成功解析为 IPv4 地址，或者使用 netsh interface isatap set router 命令来获取 ISATAP 路由器的单播 IPv4 地址。

迁移您的 Intranet：第一阶段
对于迁移至 IPv6 的第一阶段，为了在 Intranet 上部署 ISATAP，您需要执行以下步骤。
确定 ISATAP 子网前缀 必须确定要分配给 Intranet 相应逻辑 ISATAP 子网的 64 位子网前缀。可从 ISP 或 Internet 注册机构获取 48 位前缀，也可以派生您自己的 48 位唯一本地前缀（请参阅 tools.ietf.org/html/rfc4193 上的在线 RFC 4193）。
根据 48 位前缀为逻辑 ISATAP 子网选择一个 16 位子网 ID。48 位前缀和 16 位子网 ID 的组合为 64 位 ISATAP 子网前缀。例如，48 位唯一本地前缀 FD8A:219C:052A::/48 和子网 ID 1 形成 64 位子网前缀 FD8A:219C:052A:1::/64。
指定 ISATAP 路由器计算机 确定哪台计算机将成为 ISATAP 路由器。尽管许多商用路由器都支持 ISATAP 路由器功能，但此处所述的信息专门针对运行 Windows Server 2008 的计算机。
ISATAP 路由器计算机既不需要多个 LAN 接口，也不需要在第一阶段连接到具有 IPv6 功能的 Intranet 部分；但是，所选择的计算机应在今后能够使用附加 LAN 接口（连接到具有 IPv6 功能的 Intranet 部分）进行更新。
配置 ISATAP 路由器计算机 在 ISATAP 路由器计算机上，发出以下命令可将 ISATAP 路由器计算机上的 ISATAP 路由器隧道接口置于媒体连接状态：
netsh interface isatap set router IPv4Address
IPv4Address 是分配给连接到逻辑 ISATAP 子网的 ISATAP 路由器计算机 LAN 接口的 IPv4 地址。
接下来，确定 ISATAP 隧道接口的名称或接口索引，该接口对应于连接到逻辑 ISATAP 子网的 ISATAP 路由器计算机的 LAN 接口，所有信息均来自以下命令的输出：
netsh interface ipv6 show interfaces
之后，使用以下命令启用 ISATAP 接口上的播发：
netsh interface ipv6 set interface ISATAPInterfaceNameOrIndex advertise=enabled
ISATAPInterfaceNameOrIndex 是 ISATAP 隧道接口的名称或接口索引。
下一步，使用以下命令将 ISATAP 路由器计算机配置为向 ISATAP 主机播发 ISATAP 子网前缀：
netsh interface ipv6 add route ISATAPSubnetPrefix ISATAPInterfaceNameOrIndex publish=yes
ISATAPSubnetPrefix 由 ISATAP 子网前缀确定
配置 DNS 在 DNS 中，将名称 ISATAP 的地址 (A) 记录添加到相应域，以便 Intranet 上的 ISATAP 主机能够成功地解析名称“ISATAP”。例如，如果您的 Intranet 主机使用 contoso.com DNS 后缀，则现在必须针对名称 isatap.contoso.com 将一条 A 记录添加到 contoso.com 域，该名称具有分配给 ISATAP 路由器的 LAN 接口（位于仅使用 IPv4 的 Intranet 上）的 IPv4 地址。
如果 DNS 服务器正在运行 Windows Server 2008，则在 DNS 服务器上使用注册表编辑器 (regedit.exe)，以便从 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\DNS\Parameters\GlobalQueryBlockList 注册表值中删除 ISATAP 条目。
测试 ISATAP 主机 在 Intranet 上的 ISATAP 主机中，使用 Ipconfig 工具查看所分配的地址。ISATAP 主机的地址形式应为 ISATAPSubnetPrefix::5EFE:w.x.y.z 或 ISATAPSubnetPrefix::200:5EFE:w.x.y.z。例如，如果您的 ISATAP 子网前缀为 FD8A:219C:052A:1::/64，并且 ISATAP 主机的 IPv4 地址为 10.1.31.97，则分配给 ISATAR 主机的 ISATAP 隧道接口地址应该是 FD8A:219C:052A:1::5FE:10.1.31.97。
如果 ISATAP 主机的地址不以 ISATAP 子网前缀的 ISATAP 地址为基础，则验证主机是否能够解析名称“ISATAP”。如果不能，则验证是否在相应域中创建了 A 记录；对于正在运行 Windows Server 2008 的 DNS 服务器，还需验证是否已修改了 GlobalQueryBlockList 注册表值，以便删除 ISATAP 条目。如果名称可以进行解析，则验证是否已正确配置了 ISATAP 路由器计算机。如果已配置正确，则验证 Intranet 上的路由器是否允许转发 IPv4 协议 41 通信。
当 ISATAP 主机能够使用基于 ISATAP 子网前缀的地址成功地配置自身时，它们将在 DNS 中把这些 ISATAP 地址注册为 AAAA 记录，并开始将它们用于基于 IPv6 的连接。

迁移您的 Intranet：第二阶段
在迁移到 IPv6 的第二阶段，您需要修改 ISATAP 路由器配置，以便在仅使用 IPv4 和具有 IPv6 功能的 Intranet 部分之间执行转发。
在 ISATAP 路由器计算机上，发出以下命令：
netsh interface ipv6 show interfaces
根据上述命令的输出，确定连接到具有 IPv6 功能的 Intranet 部分的 LAN 接口以及 ISATAP 隧道接口的名称或接口索引。
使用以下命令启用 ISATAP 接口上的转发：
netsh interface ipv6 set interface ISATAPInterfaceNameOrIndex forwarding=enabled
使用以下命令启用 LAN 接口上的转发：
netsh interface ipv6 set interface LANInterfaceNameOrIndex forwarding=enabled
LANInterfaceNameOrIndex 是 LAN 接口的名称或接口索引。
使用以下命令为 ISATAP 路由器添加默认路由：
netsh interface ipv6 add route ::/0 LANInterfaceNameOrIndex NextHopAddress publish=yes
NextHopAddress 是具有 IPv6 功能的 Intranet 部分上相邻本机 IPv6 路由器的 IPv6 地址。
为了能够从具有 IPv6 功能的 Intranet 部分访问逻辑 ISATAP 子网，使用指回到 ISATAP 路由器计算机的 ISATAP 子网前缀的路由来配置本机 IPv6 路由器非常重要。
为了针对具有 IPv6 功能的 Intranet 部分上的计算机有选择地禁用 ISATAP，请在 DNS 中处理名称 ISATAP 的 A 记录，以便具有 IPv6 功能的 Intranet 部分上的计算机无法解析名称 ISATAP。
可供选择的另一个选项是创建 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters\DisabledComponents 注册表，并将其值设置为 0x4（DWORD 类型）。

迁移您的 Intranet：第三阶段
对于第三阶段，当整个 Intranet 都具有 IPv6 功能时，需要通过 DNS 删除 ISATAP 部署，然后重新配置 ISATAP 路由器计算机。对于 DNS，删除名称 ISATAP 的所有 A 记录。这将防止任何主机确定 ISATAP 路由器的 IPv4 地址。
对于 ISATAP 路由器计算机，运行以下命令：
netsh interface isatap set router default
此命令将 ISATAP 组件重置回其默认状态。
根据以下命令的输出，确定 ISATAP 隧道接口的名称或接口索引：
netsh interface ipv6 show interfaces
使用以下命令禁用 ISATAP 接口上的转发和播发：
netsh interface ipv6 set interface ISATAPInterfaceNameOrIndex forwarding=disabled advertise=disabled
使用以下命令从 ISATAP 路由器计算机上删除 ISATAP 子网前缀路由：
netsh interface ipv6 delete route ISATAPSubnetPrefix ISATAPInterfaceNameOrIndex
ISATAPSubnetPrefix 为 ISATAP 子网前缀。
有关 ISATAP 部署的更多信息，包括冗余 ISATAP 路由器和防火墙注意事项的详细信息，请参阅 go.microsoft.com/fwlink/?LinkId=106926 处的“站内自动隧道寻址协议部署指南”。

Joseph Davies 是 Microsoft 的一位技术撰稿人，从 1992 年起一直从事 Windows 网络主题的培训和编写工作。他曾为 Microsoft Press 编写了八本著作，是每月在线 TechNet 网络专家专栏的作者。可从 microsoft.com/technet/community/columns/cableguy/about.mspx 阅读有关网络专家的详细信息。


 Windows PowerShell: 进度报告
Windows PowerShell
进度报告
Don Jones

我最近正在编写一个冗长而复杂的 Windows PowerShell 脚本，它在运行时经常会失去响应。我编写了这个程序后打算把它作为计划任务运行，因此它实际上不会产生很多见输出。当运行它进行第一次全面测试时，我很紧张甚至有些担心，
恐怕程序会出现死循环或其他脚本问题。
当外壳停止运行并无助地闪烁着它的小光标时，我就问自己“要终止它吗？”显然我对自己没有信心，因为我很快就按下 Ctrl+C 中断了脚本。现在该是添加一些进度报告的时候了。

重复,重复,重复
本月 Cmdlet：Tee-Object
在本月，我想展示一下我最喜欢的一个故障排除 cmdlet。以下面的代码为例：
Get-WMIObject Win32_Service | Where { $_.State -ne "Running"
-and $_.StartMode -eq "Automatic" } | ForEach-Object { $_.Start() }
表面上看，它好像要启动所有设置为自动启动的服务，但是由于某种原因还没有启动。它实际上并没有运行，并且要想找到它不运行的原因可能有些困难，因为您不能钻入管道中间分秒不离地查看。也就是说，唯一的办法是使用 Tee-Object。
Tee-Object 将对象重新定向到文件（或变量）并将其沿管道向下传递。例如：
Get-WMIObject Win32_Service | Tee-Object AllServices.csv | Where
{ $_.State -ne "Running" -and $_.StartMode -eq "Automatic" } |
Tee-Object FilteredServices.csv | ForEach-Object { $_.Start() }
经此修改后，即可看到执行每个管道命令后发生的情况，很快我发现我的 FilteredServices.csv 文件是空的！难怪这个脚本不能正常运行！通过进一步的研究我发现了导致出现问题的根本原因，StartMode 是 "Auto" 而不是 "Automatic"，是 Tee-Object 让我查明了出现问题的准确位置。

我要做的第一件事是添加一组状态消息，让我能够确切知道脚本正在做什么。利用 Get-Help cmdlet，外壳可以很容易地实现此功能。继续操作并在外壳中试一试：
Write-Verbose "Test Message"
如果您刚刚试过，就会注意到它其实什么也没做。这是因为 Write-Verbose 将对象发送到特殊的 Verbose 管道，默认情况下，该管道不显示其输出。内置的外壳变量 $VerbosePreference 控制此管道。此变量的默认值是 SilentlyContinue，它会抑制 verbose 输出。将其设置为 Continue，打开管道：
$VerbosePreference = "Continue"
现在可以将一组 Write-Verbose 声明添加到我的脚本中，并看一看运行时所发生的详细情况。此方法的吸引人之处在于，在完成测试和故障排除后，我可以通过在脚本开头将 $VerbosePreference 设回 SilentlyContinue 来关闭所有多余的聊天。
没有必要前去删除所有 Write-Verbose 声明。实际上，由于它们就在脚本中，因此只要我需要手动运行脚本，我就可以随时很容易地将 Verbose 管道切换回来。

但是我需要真正的进度
如果脚本没有陷入死循环并且能够完美运行，我就会关闭 Verbose 管道然后重新运行一次 — 只是为了确认。
现在的问题是，我知道脚本在功能方面没有任何问题，但我就是无法面对闪烁着的光标。（我面对的就是注意力集中问题。在百无聊赖的情况下，我只好想尽一切办法来打发时间。）
我需要了解的是有关脚本进展程度的一般指示，以及它的预计完成时间。基本上来说，我希望有一个类似于进度条的东西。
幸运的是，Windows PowerShellTM 包括了 Write-Progress cmdlet。这个 cmdlet 并不提供与 Windows® 中的进度条一样的图形化进度条，但尽管如此，它还是会显示出一个不错的进度条，如图 1 所示。它有点像 Windows Server® 2003 或 Windows XP 中基于文本的安装部分所使用的文件复制进度条。
图 1 您的脚本进展到什么程度了？
图 1 您的脚本进展到什么程度了？
使用 Write-Progress 需要进行一些说明。实际上，我认为举个例子会更好一些。请看下面的脚本：
for ($a=1; $a -lt 100; $a++) {
  Write-Progress -Activity "Working..." `
   -PercentComplete $a -CurrentOperation
   "$a% complete" `
   -Status "Please wait."
  Start-Sleep 1
}
它使用 Write-Progress 来显示进度条。我使用 Start-Sleep 使脚本每循环一次时都暂停一秒，以便它的执行速度足够慢，使我们能够看到进展情况；如果不暂停的话，从 0 循环到 100 会非常快，进度条在屏幕上只是一闪而过。
正如您所见，被我设置为 Working 的活动显示在进度条的顶部。Status 显示在它的正下方，而 CurrentOperation 显示在底部。外壳一次只支持一个进度条。每次使用 Write-Progress 时都会创建一个新的进度条（如果当前未显示）或更新当前显示的进度条。
在这里我还要告诉大家的是可以使进度条在操作执行完毕后消失。只需在脚本的结尾处添加下列代码即可：
Write-Progress -Activity "Working..." `
 -Completed -Status "All done."
一般来说，进度条会在脚本完成后消失，但是如果脚本还有其他事情要做，您可能希望在使用脚本执行其他任务时，将进度条隐藏起来；-Completed 参数可以从显示画面中移除进度条。

嘀答...嘀答...嘀答...
Write-Progress 的另一个常见用法是显示“剩余秒数”，而不是实际的进度条。示例如下：
for ($a=100; $a -gt 1; $a--) {
  Write-Progress -Activity "Working..." `
   -SecondsRemaining $a -CurrentOperation
   "$a% complete" `
   -Status "Please wait."
  Start-Sleep 1
}
在这里将循环改为从 100 循环到 1，我将使用 Write-Progress 的 SecondsRemaining 参数，而不是 PercentComplete。结果如图 2 所示。正如您所见，进度条消失，取而代之的是一个倒计数的时钟。外壳自动将剩余的总秒数转换为小时、分钟和秒，为用户提供更加直观的信息。此处显示的完成百分比会从 100 开始减少，因为它只是我提供的 CurrentOperation 参数。没有实际计算的完成百分比；Windows PowerShell 只显示当前值 $a，后跟字符串 "% complete"。
图 2 完成脚本要多长时间？
图 2 完成脚本要多长时间？

脚本通信
我非常热衷于编写脚本来显示脚本执行进展情况。它可以采用 verbose 输出的形式，也可以只是一个简单的进度条。它可以弥补我注意力不足的问题，也可以帮助以后需要运行我的脚本的其他用户。最后我要说的是，以某种形式显示状态和进度信息是非常有用的。

Don Jones 是《TechNet 杂志》的特约编辑，并且是《Windows PowerShell:TFM》(SAPIEN Press, 2007) 的合著者。他主要讲授 Windows PowerShell（请参阅 www.ScriptingTraining.com），可通过 ScriptingAnswers.com 网站与其联系。


 您好，脚本专家！: 我们最喜爱的 Shell 比赛
您好，脚本专家！
我们最喜爱的 Shell 比赛
The Microsoft Scripting Guys
下载这篇文章的代码: HeyScriptingGuy2008_03.exe (150KB)

古老的 谚语说道：上天眷顾一切生命，即使是一只小小鸟也会受到她的恩泽。当然，脚本专家们并不建议大家尝试把麻雀从天上打下来。（尽管某些人希望好好“照顾”一下那些周六早上 7:00 就坐在屋顶上尖叫个不停的蠢鸟，不过，那就是另外一个故事了。[脚本编辑就像那些小小鸟，所以我们认为所谓的“照顾”撰写本专栏的脚本专家的含义是“确保他们保持健康状态”-Ed.]）然而，令人欣慰的是如果您确实生病了，总会有人来关心您，并且无论您看起来多么渺小、多么不重要，始终有人在某处关注着您。[尽管有可能只是一个编辑。-Ed.]
适用于小小鸟的真理对于系统管理脚本来说同样正确。可以肯定地说，在脚本世界中，大多数注意力都集中在主流脚本技术：Windows PowerShellTM、VBScript、WMI、ADSI，甚至 FileSystemObject 上。这些技术占据了绝大多数的广告宣传也可以理解，毕竟，它们能使您完成许多又酷又有用的事情。但这并不意味着它们就是脚本编程人员们的唯一选择。远远不是。
以 Shell 对象为例。尽管 Shell 对象可能没有 Windows PowerShell 那样有名或广泛流传，但它依然非常重要并且非常有用。
很可能迟早会有人要求您用 Shell 对象来编写一个系统管理脚本。这产生了一个很明显的问题：Shell 对象究竟可以做些什么呢？事实证明，使用 Shell 对象可以实现许多相当酷的事情，其中一些（如管理磁盘配额以及在复制或移动文件时显示进度条）已在 Microsoft® Windows® 2000 脚本指南 (microsoft.com/technet/scriptcenter/guide) 中介绍过。在本月的专栏中，我们将为您展示使用 Shell 对象能实现的一些有趣的其他小事情，有些您可能根本无法想象的事情均可使用 Shell 对象来实现。

更改文件的上次修改日期
您们当中许多人可能在看到前面的标题时都会想“咳，等等。不可能使用脚本来更改文件的上次修改日期，至少用 VBScript 做不到。”对此我们只能说：您究竟是从何得出的这种想法？
噢，对了；我们脚本专家之前可能说过这样的话，是吧？那么，事实证明，我们错了。震惊吧！可使用 VBScript 来更改文件的上次修改日期。只需使用 Shell 对象即可。
注意：不要再花力气质问脚本专家们为什么会犯这样的错误了；经过这么多年的观察，答案不是显而易见的嘛。更为有趣的问题是：我们究竟如何才能确保正确地完成目标呢？
您说希望更改文件的上次修改日期，对吧？那么，请使用以下脚本：
Set objShell = _
  CreateObject("Shell.Application")

Set objFolder = _
  objShell.NameSpace("C:\Scripts")
Set objFolderItem = _
  objFolder.ParseName("Dr_Scripto.jpg")

objFolderItem.ModifyDate = _
  "01/01/2008 8:00:00 AM"
如您所看到的，这个脚本并没有什么非常复杂的地方。首先创建 Shell.Application 对象的一个实例。（顺便说一下，切勿混淆 Shell.Application 和 Wscript.Shell，后者是 Windows Script Host Shell 对象。我们现在使用的 Shell 对象是 Windows Shell 对象。）创建好 Shell 对象的实例并运行之后，我们使用 Namespace 方法绑定到文件夹 C:\Scripts，然后使用命名奇特的 ParseName 方法绑定到该文件夹中的指定文件。在本例中，我们将绑定到文件名为 Dr_Scripto.jpg 的一个 JPEG 图像：
Set objFolderItem = _
  objFolder.ParseName("Dr_Scripto.jpg")
那么在绑定到该文件之后要做什么呢？很简单；只需向 ModifyDate 属性指定一个新日期和时间即可：
objFolderItem.ModifyDate = _
  "01/01/2008 8:00:00 AM"
这就是我们所要做的一切。
没错儿，说对了。非常酷，不是吗？运行该脚本后，该文件的上次修改日期将设置为 2008 年 1 月 1 日上午 8:00。（如果需要，可在 Windows 资源管理器中打开文件夹 C:\Scripts 亲自确认。）
当然，您们中的某些人可能会想“太酷了。我可以更改文件的上次修改日期了。但我究竟为什么要更改文件的上次修改日期呢？”是这样的，人们常常将上次修改日期用作版本控制系统的排序依据；如果您的某个脚本文件有多个副本，则跟踪正式版本的方法之一是再次检查上次修改日期。通过检查上次修改日期，可确定该脚本的某个副本是否为原始脚本的未修改版本。
注意：当然，任何人都可运行刚才所展示的脚本并更改上次修改日期。但由于缺少每项操作的代码签名，某些人总能找到一些方法来破坏系统。假如您与之共享脚本的同事很有道德，此方法则比较合理。
有时，您可能决定更新并标准化所有脚本的上次修改日期。该如何做呢？好的，假设您的所有脚本都存储在文件夹 C:\Scripts 中，则只需运行下列代码段即可：
Set objShell = _
  CreateObject("Shell.Application")

Set objFolder = _
  objShell.NameSpace("C:\Scripts")
Set colItems = objFolder.Items

For Each objItem In colItems
    objItem.ModifyDate  = _
      "01/01/2008 8:00:00 AM"
Next
正如您所看到的那样，此脚本开头部分非常类似于我们向您展示的第一个脚本。但是，在本例中，绑定到 C:\Scripts 文件夹后，并不使用 ParseName 绑定到该文件夹中的某个文件。而是使用以下代码行返回该文件夹中所有文件的集合：
Set colItems = objFolder.Items
得到此集合后，建立一个 For Each 循环来遍历集合中的所有项。在 For Each 循环内，我们使用下面这行现成的代码将集合中第一个文件的 ModifyDate 属性值更改为 2008 年 1 月 1 日上午 8:00：
objItem.ModifyDate  = _
  "01/01/2008 8:00:00 AM"
然后，我们进入下一轮循环并对集合中的下一个文件重复此过程。完成所有循环后，文件夹 C:\Scripts 中的所有文件（对，隐藏文件除外）都将具有完全相同的上次修改时间。知道这有多简单了吧？现在，谁还会说无法使用 VBScript 来更改文件的上次修改日期？
哦，对了。

说到错误...
最初的时候，当脚本专家们首次开始编写系统管理脚本时，当时并无任何方法可访问附加到 NTFS 文件系统中某个文件的所有扩展文件信息。例如，如果右键单击一个 .wav 文件，然后单击属性，您将看到类似于图 1 所示的信息。
图 1 文件属性摘要
图 1 文件属性摘要
如何使用脚本来检索“Bit Rate”或“Audio sample size”之类的值呢？基本不太可能。嗯，除非使用 Shell 对象。（或者 Windows Desktop Search 3.0，假设已下载并安装了该软件。）后来检索文件的所有扩展属性信息的功能被添加到了 Shell 对象中，但脚本专家们不知为何忽略了这一点。结果我们就告诉大家“无法使用脚本来确定 .wav 文件的比特率”。但是，如图 2 中的代码所示，实际上完全可以做到这一点。
Figure 2 使用脚本来获得 .wav 文件的比特率 (Close Figure 2)
Set objShell = CreateObject("Shell.Application")

Set objFolder = objShell.NameSpace("C:\Scripts")
Set objFolderItem = objFolder.ParseName("J0388563.wav")

For i = 0 to 33
    strHeader = objFolder.GetDetailsOf(objFolder.Items, i)
    strValue = objFolder.GetDetailsOf(objFolderItem, i)
    If strValue <> "" Then
        Wscript.Echo strHeader & vbTab & strValue
    End If
Next
此脚本的工作原理是什么？此脚本的开头部分也与我们为您展示的第一个脚本非常相似：创建好 Shell.Application 对象的一个实例并绑定到 C:\Scripts 文件夹后，使用 ParseName 方法绑定到相应的文件（在本例中为 J0388563.wav）。
此时，问题显得有些棘手。首先，创建一个 For Next 循环从 0 运行到 33；这是因为文件支持索引号从 0 到 33 的最多 31 个不同的扩展属性。（请注意：有些编号（如 27 和 28）是有效索引号，但并不包含任何属性值。）事实上，文件支持图 3 中所示的各个属性。
Figure 3 文件属性 (Close Figure 3)

索引 | 属性
0 | Name
1 | Size
2 | Type
3 | Date Modified
4 | Date Created
5 | Date Accessed
6 | Attributes
7 | Status
8 | Owner
9 | Author
10 | Title
11 | Subject
12 | Category
13 | Pages
14 | Comments
15 | Copyright
16 | Artist
17 | Album Title
18 | Year
19 | Track Number
20 | Genre
21 | Duration
22 | Bit Rate
23 | Protected
24 | Camera Model
25 | Date Picture Taken
26 | Dimensions
29 | Episode Name
30 | Program Description
32 | Audio Sample Size
33 | Audio Sample Rate
那么在 For Next 循环内部执行什么呢？对，我们首先要做的就是执行下面这行代码：
strHeader = _
  objFolder.GetDetailsOf(objFolder.Items, i)
这行代码的含义是使用 GetDetailsOf 方法检索属性 0 的名称（请记住，循环是从 0 运行到 33）。然后将检索到的名称存在名为 strHeader 的变量中，然后使用下面这行代码检索项目 0 的属性值，并将返回信息存储在名为 strValue 的变量中：
strValue = _
  objFolder.GetDetailsOf(objFolderItem, i)
明白其工作原理了吗？项目 0 正好是 Name 属性。所以第一次循环完成后，strHeader 将等于 Name。同时，第一个文件的实际名称（即 Name 属性的值）是 J0388563.wav。因此，第一次循环完成后，strValue 将等于 J0388563.wav。经过这番解释之后，它看起来并非多么复杂了，不是吗？
您可能知道，并非所有的文件类型都支持所有扩展属性。（例如，.jpg 文件并没有“Album Title”或“Audio Sample Rate”属性。）因此，我们将使用下一行代码来检查返回值是否为空字符串：
If strValue <> "" Then
如果返回值是空字符串，则只需跳回循环开头处并对下一个扩展属性重复此过程。如果返回值不是空字符串，则我们将回显属性名称和值，如：
Wscript.Echo strHeader & vbTab & strValue
最终结果如何呢？非常类似于以下内容：
Name    j0388563.wav
Size    169 KB
Type    Wave Sound
Date Modified   1/19/2004 8:56 AM
Date Created    3/6/2006 2:02 PM
Date Accessed   12/3/2007 10:41 AM
Attributes      A
Status  Online
Owner   FABRIKAM\kenmyer
Bit Rate        90kbps
Audio Sample Size       4 bit
Audio Sample Rate       11 kHz
很好。
由于时间（和空间）有限，如果您希望得到返回最相关属性值的更为简单的方法，可以尝试图 4 中所示的脚本。
Figure 4 返回属性值的一种简便方法 (Close Figure 4)
Const colInfoTip = -1

Set objShell = CreateObject("Shell.Application")

Set objFolder = objShell.NameSpace("C:\Scripts")
Set objFolderItem = _
  objFolder.ParseName("01. Out On The Weekend (Album Version).wma)")

Wscript.Echo objFolder.GetDetailsOf(objFolderItem, colInfoTip)
该脚本有什么作用呢？如果在 Windows 资源管理器中并且将鼠标指针放在某个文件上，将弹出一个工具提示并向您提供一些有关此文件的有用信息（如图 5 中所示的信息）。如何使用脚本来得到该工具提示信息？没错。可以使用我们刚才向您展示的脚本：
图 5 在工具提示中显示的属性
图 5 在工具提示中显示的属性
Artist: Neil Young
Album Title: Harvest
Year: 1972
Track Number: 1
Duration: 0:04:35
Type: Windows Media Audio file
Bit Rate: 256kbps
Protected: Yes
Size: 5.31 MB
本月我们要讲的就是这些内容。最后需要注意的一点与小小鸟有关。希望跟踪它的一个理由可能是：在某些地方，麻雀进入您的屋子被认为是运气不好的象征。为什么呢？因为它意味着住在屋子里的某人快要死了。（在某些情况中，只有它落在钢琴上才会出现这种情况。但这并不是迷信，而是超自然现象。）然而有趣的是：在其他某些地方，它进入您的屋子则意味着住在屋子里的人将要结婚了。讨论一下陷于两难境地，是吧？

Scripto 博士的脚本谜题
每月一次的挑战！不仅测试您的解谜技能，还测试您的脚本编写技能。

2008 年 3 月：神秘脚本
本月的谜题是密码，即每个字母都已被其他字母替换。（我们完整保留了所有的符号和数字。）相同的字母始终代表一个替换字母。例如，所有出现字母 a 的地方都可能由字母 b 替换，所有出现字母 b 的地方都可能由字母 z 替换等等。以下是一个简单的示例：
tdsjqu dfoufs
解码如下：
script center
本例中的解码通过将每个字母用字母表中的前一个字母替换得出，所以 t 由 s 替换，d 由 c 替换，以此类推。
此谜题则更为随机。解码此脚本后，您将得到一个脚本，它能打开 Microsoft Excel® 的一个实例、添加一个新的电子表格、向该电子表格的第一列指定四个值，然后以升序方式对该列进行排序。
慢慢体会其中的乐趣吧！

谜题
kqyjs edfjkzyrlyg = 1
kqyjs edyq = 2
kqyjs edjqtstqmj = 2

jzs quwzekzd = ktzfszquwzks("zekzd.faadlkfslqy")
quwzekzd.iljludz = stcz

jzs quwmqtxuqqx = quwzekzd.mqtxuqqxj.frr
jzs quwmqtxjozzs = quwmqtxuqqx.mqtxjozzsj(1)

quwmqtxjozzs.kzddj(1, 1) = "kfs"
quwmqtxjozzs.kzddj(1, 2) = "rqg"
quwmqtxjozzs.kzddj(1, 3) = "ufs"
quwmqtxjozzs.kzddj(1, 4) = "faz"

jzs quwtfygz = quwzekzd.fkslizkzdd.zysltztqm
quwtfygz.jqts quwtfygz, edfjkzyrlyg, , , , , , edyq, , , edjqtstqmj

Scripto 博士的脚本谜题
答案：神秘脚本，2008 年 3 月
以下是解码该脚本的密钥：
Actual Letter	a	b	c	d	e	f	g	h	i	j	k
Coded Letter	f	u	k	r	z	b	g	o	l	w	x

Actual Letter	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z
Coded Letter	d	n	y	q	a	h	t	j	s	c	i	m	e	v	p
以下是实际解码后的脚本：
Const xlAscending = 1
Const xlNo = 2
Const xlSortRows = 2

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True

Set objWorkbook = objExcel.Workbooks.Add
Set objWorksheet = objWorkbook.Worksheets(1)

objWorksheet.Cells(1, 1) = "Cat"
objWorksheet.Cells(1, 2) = "Dog"
objWorksheet.Cells(1, 3) = "Bat"
objWorksheet.Cells(1, 4) = "Ape"

Set objRange = objExcel.ActiveCell.EntireRow
objRange.Sort objRange, xlAscending, , , , , , xlNo, , , xlSortRows

The Microsoft Scripting Guys脚本专家为 Microsoft 工作，也就是受雇于 Microsoft。在玩、教或看棒球（以及各种其他活动）的闲暇之余，他们还负责维护 TechNet 脚本中心。要查看相关信息，请登录 www.scriptingguys.com。


 安全观察: 在 Windows Server 2008 中使用 SCW
安全观察
在 Windows Server 2008 中使用 SCW
Jesper M. Johansson
这篇文章基于 Windows Server 2008 的预发布版。文中的所有信息均可能发生变更。

在 2005 年，Microsoft 发布了 Windows Server 2003 SP1。该 service pack 在 Windows 中引入了第一款基于角色的安全管理工具：安全配置向导 (SCW)。Microsoft 首先希望将 SCW 设计成为一款能够减少受攻击面的工具。其目的是分析
您在用计算机实际做些什么，然后自动配置计算机来支持您需要的角色，同时禁用那些没有用到的角色和服务。
Windows Server® 2008 保留了 SCW，其中使用新角色进行了更新并集成了新的 Windows® 防火墙。但是，它仍像过去一样，是一款高级的管理工具。
Windows Server 2008 还包括新的基于角色的“服务器管理器”工具及其系列：“添加角色”和“添加功能向导”。在 Windows Server 2008 中，不是采用老式的“添加/删除 Windows 组件”控制面板来添加单个组件，现在您可以使用角色管理工具来配置服务器。Byron Hynes 在“使用服务器管理器配置角色”一文中介绍了这些工具，该文章也可在本期《TechNet 杂志》中找到。
“添加角色”和“添加功能向导”被设计用来使用正确的组件配置服务器，以支持所选择的角色。这同时也会对内置的防火墙进行配置，以确保这些角色正常工作。有鉴于此，您可能想知道是否仍有必要使用 SCW。当然，许多管理员将不再需要 SCW。但是，仍有两个群体将 SCW 视为无法替代的工具。第一个群体是偏执的安全人员。他们很欣赏 SCW 能够将安全性提高到一个新水平。
您可以把“添加角色”和“添加功能向导”看作是能够选择默认服务器并加以配置以可靠支持所需角色和功能的工具。另一方面，SCW 也是对您的服务器加以配置以仅支持所需角色和功能的工具。SCW 还具有教学效果，可帮助您了解有关如何配置服务器的更多信息。因此，我强烈建议您在使用服务器的补充角色和功能对服务器进行配置后运行 SCW。
第二个群体由那些希望了解各种组件之间关系的用户组成。SCW 包含一组 XML 文件，其中记录了角色和功能、服务以及网络端口之间的关系。如果您想了解各种组件的需要，则 SCW 是一个非常有价值的工具。
在本专栏中，我将介绍 SCW 的工作原理以及如何用它来保护您的服务器。此外，我还会对 SCW 和“服务器管理器”工具进行比较。请注意，本专栏系根据我的 Windows Server 2008 Security Resource Kit (Microsoft Press®, 2008) 一书改编而成。

安全配置向导概述
为了设置此阶段，我想展示一些有关 Windows Server 2008 攻击面的统计信息。在通过添加角色和功能的个人选择来配置服务器之前，它仍具有相当重要的服务空间。默认情况下，Windows Server 2008 有 105 个服务，其中 42 个设置为自动启动、55 个设置为手动启动、8 个被禁用。而在全新安装的 Windows Server 2003 R2 SP2 中，默认情况下会安装 86 个服务，其中 34 个设置为自动启动、32 个设置为按需启动、20 个被禁用。
即使在角色隐喻和支持的默认角色减少的情况下，Windows Server 2008 仍有较大的空间，并需要您在强化服务器时特别加以注意。利用 SCW，您可以逐步为特定服务器创建自定义的安全配置。
SCW 采用与现有工具完全不同的方法来对服务器进行强化。它通过角色隐喻来配置系统以支持那些角色和少量其他项（如果有的话）。虽然 SCW 可帮助配置防火墙（类似于“添加角色”和“添加功能向导”），但是 SCW 同时还会禁用不必要的服务并配置一些附加的安全设置。最后，“添加角色”和“添加功能向导”只能安装和配置 Windows 中内置的角色，但 SCW 却是可扩展的。开发人员或管理员可编写自定义的角色或功能配置文件，然后使用 SCW 来配置任何产品。
SCW 设计用于在安装了服务器中应具有的所有角色和功能后使用。如果服务器中还有第三方应用程序，则也应该在运行 SCW 前安装它们。
为了演示它的工作原理，我已经配置了一个具有三个角色（应用程序服务器、DNS 服务器和 Web 服务器）和两个功能（Microsoft® .NET Framework 3.0 功能和 Windows Process Activation Service）的服务器。这不是一组特别符合逻辑的角色和功能，但却是用来说明本讨论的一个非常好的示例。
要启动 SCW，请从“Administrative Tools”（管理工具）菜单中运行 SCW。您将看到如图 1 所示的对话框。
图 1 SCW 首先会询问您要执行什么操作
图 1 SCW 首先会询问您要执行什么操作
第一步要选择是创建一个新的安全策略、编辑或应用现有策略还是回滚策略以使系统恢复到原始设置。各个选择项都非常容易理解。
如果选择创建新安全策略，SCW 会创建一个新策略（使用某个计算机作为策略必须支持的模板）。它分析计算机并确定所支持的角色和功能，还会确保它们能够工作但不启用许多不必要的功能。
SCW 在原型模型上运行。它使用 XML 文件指定角色和功能的外观，包括安装了哪些文件、配置了哪些服务等。这就是需要在要制定策略的计算机上安装所有程序的原因。如果有第三方程序在安装时安装了 SCW 定义，则它们将被无缝集成。但是，如果第三方程序没有安装 SCW 定义，则需要手动配置它们。
正如您所见，您可以在一个系统上创建一个策略，然后将其应用到许多系统。如果您正在构建具有许多系统的网络，应首先定义全部单独配置的主机类。然后可使用其中一个作为原型来创建策略，接下来可以很容易地将策略应用到所有其他系统，只需进行少量修改甚至不必进行任何修改。
单击“Next”（下一步）时（在图 1 所示的对话框中），向导会询问您要使用哪个计算机作为新策略的基准（或原型）。通常选择本地计算机，但也可选择使用远程计算机作为原型。
指定要使用的系统后，即进入分析阶段。此时，SCW 将枚举您已安装的角色和功能，并将其与角色和功能数据库相匹配。数据库包含的信息包括每个角色和功能使用了哪些服务、它们需要哪些网络端口以及其他一些重要信息。分析完成后，可单击“View Configuration Database”（查看配置数据库）来查看“Security Configuration Wizard”（安全配置向导）找到的内容。请注意，这是一个只读视图，它显示了有关计算机配置的全面信息。实际上，如果您想真正了解计算机中的内容，则可以花费足够的时间来研究此信息。

使用 SCW 配置服务器
单击“Next”（下一步）后，将进入 SCW 的四部分中的第一部分：基于角色的服务配置。您可能会注意到您在 SCW 中发现的角色（如图 2 所示）与在“添加角色向导”中发现的角色不属于同一组。“添加角色向导”中可用的大部分角色都包括在其中，此外 SCW 还提供了一些未包括在“添加角色向导”中的角色。例如，我所选择的“应用程序服务器”角色就不包括在其中。这是因为 SCW 使用略有不同的角色隐喻。我将稍后对此进行详细讨论。
图 2 使用 SCW 选择希望服务器支持的角色
图 2 使用 SCW 选择希望服务器支持的角色
通常情况下，在此对话框中已经为您选择了一组正确的角色。因此您只需验证分析结果中已经包含了您所要的内容即可。如果出现问题，请检查角色是否已安装，如果缺失则安装它，然后再重新运行 SCW。如果犯了错误也不要紧。SCW 中的回滚功能可撤销对策略所做的任何更改，使您重新回到开始处。
您在此部分中给出的回答非常重要，因为它们将决定您稍后在网络部分中看到的内容。幸运的是，检测逻辑非常不错，通常所选的角色都是正确无误的。
还要注意，默认情况下您会看到“安装的角色”，它们是服务器能够使用磁盘数据支持的角色。所选的角色是当前支持的角色。您还可以选择查看数据库中的所有角色。为此，您只需从下拉列表中选择“All Roles”（所有角色）即可。当您必须使用尚未安装全部必需角色的原型服务器来构建策略时，这会非常有用。
在配置了角色后，您需要选择要支持的客户端功能。此功能集类似但不等同于“添加功能向导”中的功能集，其中包含的功能相对较少。同样，隐喻也不完全相同，SCW 可加以扩展，因此您将看到的内容不同于“添加功能向导”中的内容。
当您在 SCW 的“Client Features”（客户端功能）页面上单击“Next”（下一步）时，将转到“Select Administration”（选择管理）和“Other Options”（其他选项）对话框，如图 3 所示。SCW 中的“Option”（选项）与角色或功能并不是完全对应的。它可能提供管理支持，或可能只提供一个服务（如“交互服务检测”）。同样，大多数所需的选项都要在此处选择。下拉菜单也有必要专门加以指出。这将由与先前所选角色和功能的相关选项进行填充，并且会随着计算机的不同而异。
图 3 在 SCW 中选择其他服务和功能
图 3 在 SCW 中选择其他服务和功能
接下来是“Select Additional Services”（选择其他服务）对话框。尽管 SCW 附带了一个非常大的服务数据库，但它也并非无所不包。对于那些 SCW 在计算机中找到但在数据库中不存在的服务，都被显示在“Additional Services”（其他服务）页面中。所有内置服务都有所描述，您应该不会看到此对话框，除非安装了一些第三方服务。
向导然后让您选择如何处理没有配置的服务。当计划采用所创建的策略并将其应用到不同计算机时，可使用此选项。如果该计算机上的服务不同于您在其中创建策略的计算机上的服务，则 SCW 需要知道应如何处理它们。一种选择是不理会它们，这是默认值。另一种选择是禁用它们，这虽然更安全，但可能会中断一些事情。但是如果您按照要求操作，只将策略应用到从中创建策略的服务器，则您在此页选择哪个选项都无关紧要。
现在您已完成了 SCW 的“角色配置”部分，并且通过向导回顾了您所做的工作。如您在图 4 中所见，即使只是点击进入，也将明显影响计算机的攻击面。例如，由于此计算机不是“打印服务器”，没有安装打印机，因此没有必要运行后台打印程序服务。SCW 将禁用所有不需要的服务。在我们的测试服务器上，SCW 禁用了 17 个被设置为自动启动的服务，并将 42 个手动启动的服务设置为禁用。当然，您的结果会有所变化，具体取决于您的服务器配置，但是您会看到 SCW 能让您很容易地量身定制针对特定服务器的策略，从而显著减少其攻击面。
图 4 SCW 总结了您所做的变更
图 4 SCW 总结了您所做的变更
现在要转入的内容可能是 SCW 最重要的一部分：联网。在最初的欢迎页面之后，您会看到“Network Security Rules”（网络安全规则）对话框，如图 5 所示。它包含 SCW 提议的所有防火墙规则的列表，这些提议均基于您在前几部分中所选的角色支持。
图 5 SCW 将列出它认为您会需要的所有规则
图 5 SCW 将列出它认为您会需要的所有规则
如果在“网络”部分没有做进一步的配置，SCW 将构建防火墙规则来锁定网络接口，以便仅支持这些角色和功能而所有客户端都可以访问它们。但是要在服务器上真正优化安全性，应将 SCW 作为构建“服务器隔离”策略不可缺少的一部分。要了解有关服务器隔离（及其亲密成员、域隔离）的详细信息，请访问 technet.microsoft.com/network/bb545651。
在 Windows Server 2008 Security Resource Kit 一书中，有一章介绍了如何使用服务器和域隔离来确保网络安全。它还讨论了如何使用网络威胁建模来分析网络，以帮助轻松部署服务器隔离。在此过程中，SCW 是一个非常有用的工具。
通过选择规则并单击“Edit”（编辑），您可对提议的规则配置限制。这会将您带入图 6 所示的对话框。这是四个页面中的一个，这些页面可让您对联网规则设置更多的限制。例如，可以要求 IPsec 验证。如果选择此项，您还可以将端口只关联到特定的端点。例如，您可以对其进行配置，以便只允许从特定主机进行远程管理。正如您所见，这是优于“添加角色”和“添加功能向导”的主要优点。
图 6 SCW 允许您构建防火墙和 IPsec 规则
图 6 SCW 允许您构建防火墙和 IPsec 规则
这种基于所选角色构建连接安全规则的能力有两个重要作用。首先，它为了解服务器都执行哪些任务提供了绝佳的学习机会。您甚至不需要扩建服务器。您只需运行向导，进行不同的选择，然后看一看它们如何影响后续页面上的选项即可。其次，它允许您将非常抽象的端口概念与有关服务的较强逻辑概念联系起来，并完全基于系统实际执行的任务来配置网络限制。
正确操作后，这将允许您为服务器设置非常紧凑的配置。在为服务器构建安全策略时，SCW 的“联网”部分毫无疑问是应该花费大部分时间的环节。
SCW 的其余部分允许您配置审核和一些注册表设置。这些参数的默认设置对大多数组织而言已经足够，除非您有特殊要求，否则无需做太多改动。
创建了策略后，您可以将其保存下来并应用到所使用的计算机中。或者，您也可以将其应用到其他计算机。您还可以使用 scwcmd.exe /transform 命令将您的策略转换为“组策略对象”(GPO)。
但是，如果您在策略中包括了计算机特定的设置，这可能会不成功，或者会得到非常奇怪的结果。例如，如果在联网部分中创建包括本地适配器的端点限制，策略将被视为特定于计算机的，将无法成功转换。这是由于这些适配器必须使用 GUID 来指定。一台计算机上的适配器 GUID 换到其他计算机上将变得毫无意义。
因此，SCW 通常更适合于在服务器对服务器的基础上作为一种学习工具。对于大的服务器场，可以使用 SCW 作为了解计算机知识和制定基本策略的方法。然后，您可以采用该策略并使用您用来配置服务器的任何工具，如“组策略”或“企业管理系统”（如 Microsoft Systems Center）重新创建它以便进行批量部署。

SCW 与服务器管理器
到目前为止，您所看到的一件事情就是用于角色和功能的隐喻是不同的。SCW 中的“功能”是计算机作为客户端所做的事情。而“角色”是计算机作为服务器所做的事情。
这不同于在“服务器管理器”工具中使用的隐喻，在那里角色是服务的集合，而功能可以被看作是一个单元，功能在某种程度上支持角色。本质上，“服务器管理器”将角色视为您购买服务器后要做的事情。功能很重要，但它并不是您购买服务器的主要目的。同一术语的两种隐喻和两种不同的用法可能会容易使人混淆。在这两种工具之间进行切换之前，需要停下来认真考虑一下。
此外，“服务器管理器”工具不是可扩展的。它们设计用于仅管理 Windows 附带的组件。相比之下，您安装的第三方程序可以向 SCW 中添加角色和功能。您甚至可以编写自己的角色和功能。白皮书《扩展安全配置向导》（可从 go.microsoft.com/fwlink/?LinkId=107397 获得）介绍了如何实现此目标。
SCW 还可以禁用不需要的组件。另一方面，“服务器管理器”工具仅部署您要求的组件，它们不触及计算机中的任何其他组件。如果您需要帮助确定可能不需要的组件，SCW 就是可借助的工具。
此外，虽然“服务器管理器”工具和 SCW 都配置您的网络，但是 SCW 在这一点上功能要强得多。如果要构建服务器隔离策略，SCW 将是信息的金矿和部署的好帮手。这很明显是一个高级安全管理主题，而 SCW 就是一款高级安全工具。
最后，SCW 也会配置一些“服务器管理器”工具不配置的其他安全设置。但是，其中的大部分已经被更有效的控件所取代，或在 Windows Server 2008 中已成为默认设置。

Jesper M. Johansson 是解决软件安全问题的安全工程师，以及《TechNet 杂志》的特约编辑。他拥有 MIS 博士学历，并且具有 20 多年安全方面的经验。


 桌面文件: 既不可过于丰富，也不可过于省略
桌面文件
既不可过于丰富，也不可过于省略
Wes Miller

如果曾到过 Microsoft 园区，那您可能已注意到在大多数建筑物的接待区域都有共用的网亭系统。这些系统由基于 Web 的前端构成，而这些前端则连接到 Windows 终端服务，因此穿梭于各建筑物之间的员工可及时地收发电子邮件并建立其他
连接。最初，这些系统使用的是停机和回收的较旧 PC。虽然这些硬件对于其他应用程序来说非常慢、内存不足并且硬盘驱动器也不足，但对于瘦客户端应用程序来说则非常理想。如果由于某种原因而淘汰下较旧的硬件，您也可以物尽其用地将它们用作会议室中的工作站或培训机等等。这样不仅可以避免填埋旧硬件，还可让您成为环保人士，同时又节约了成本。
如果您的组织正准备升级到 Windows Vista®，您可能会发现某些硬件比想象中要旧得多。即意味不支持受信任的平台模块 (TPM) 或 Aero®，但如果您的系统仅需要更大的硬盘驱动器或更多的 RAM，那么升级一下硬件就可以了。但是，您的某些系统可能由于硬件性能过低或缺少关键功能而完全无法运行 Windows Vista。这些硬件将成为运行 Windows® 瘦客户端的理想之选。图 1 列出了 Windows Vista 的硬件要求，可根据它来确定当前所使用硬件属于哪一级。
Figure 1 Windows Vista 硬件要求 (Close Figure 1)

硬件 | 要求
CPU | 建议 1GHz 以上。CPU 速度决定了 Windows Vista 的可用性。较慢的单核 CPU 无法满足要求，但它非常适用于瘦客户端。请注意：如果正考虑使用 x64 平台，则此时是更新 Windows Vista 硬件的最佳时机，在整体更新硬件后迁移到 x64。
内存 | 建议 1GB 以上。虽然通常情况下可为系统添加内存，但当系统数量上十、上百或上千时，则需考虑这样是否经济高效。
GPU | 128MB 以上图形内存、支持 DirectX® 9.0 且具有 WDDM 驱动程序，同时支持 Pixel Shader 2.0。这不是非常关键的要求，因为它主要限制 Aero 支持。
HDD | 40GB 以上硬盘。台式计算机通常容易满足，但移动系统可能较难满足该要求。
驱动程序问题 | 是否能够为系统中的所有硬件提供 Windows Vista 驱动程序？
TPM | 如果希望在不需要 USB 闪存驱动器的情况下获得 BitLocker 支持，则您的计算机将需要 TPM 1.2 硬件。

那么，瘦客户端可做些什么呢？
可使用旧硬件和较小型的操作系统来创建常见的区域/接待处网亭，这样用户就可以及时地收发电子邮件，就像在 Microsoft 办公室中一样。可安装运行远程桌面或严格受管 Internet Explorer® 的系统。可在会议室中安装演示播放系统，只需运行 Microsoft PowerPoint® 和远程桌面以及少许其他功能即可。还可以将旧硬件/瘦客户端组合用于销售点系统或求职网亭。那么，具体应使用哪种瘦客户端呢？

Windows XP Embedded
我在以前的专栏中曾提到过如何将 Windows XP Embedded 开发为 Windows XP 的可扩展且组件化的版本。正如 Don Jones 在 2007 年 4 月的专栏（请参见 technetmagazine.com/issues/2007/04/XPe）中所讨论的一样，可使用多种工具来创建 Windows XP Embedded 映像 — 其中主要的一种是 Target Designer（请参见图 2）。可利用 Target Designer 来创建自己的自定义 Windows XP Embedded 映像。
图 2 Windows XP Embedded Target Designer 映像
图 2 Windows XP Embedded Target Designer 映像
请注意，Target Designer 随附有多个帮助您入门的设计模板。当然，可以不使用这些模板，但使用模板会相对容易些。在图 2 中，有网亭/游戏控制台以及基于 Windows 的终端模板，它们都是不错的着手点。Windows XP Embedded 还提供有完整的设备支持和本机电源管理功能，可以与完整的操作系统映像所提供的功能相媲美（只需将支持构建到映像中）。当然，添加的功能越多，所需的硬件也就越多，所以明智地取舍相当重要。Microsoft 网站上提供了有关 Windows XP Embedded 的大量信息，网址为：microsoft.com/windows/embedded/eval/xpe/default.mspx。

Windows Embedded for Point of Service
Windows Embedded for Point of Service (WEPOS) 为构建于 Windows XP Embedded 之上的服务点 (POS) 系统提供完备的标准化模板。WEPOS 内置支持大量与 POS 相关的外围设备，主要应用于零售和接待市场。与 Windows XP Embedded 不同，它仅提供专用于该角色且非常固定的一组功能，并且无法达到 Windows XP Embedded 那样的自定义程度。
WEPOS 平台旨在用于微型系统，仅需 233MHz Pentium II 处理器或更快的处理器、64MB RAM 以及 280MB 空间来存放其核心操作系统映像。可从 microsoft.com/windows/embedded/wepos 处获得有关 WEPOS 的详细信息及订购试用版的链接。

Windows Fundamentals for Legacy PCs
与主要用于设备制造商内置设备而发布的 Windows XP Embedded 和 WEPOS 不同，Windows Fundamentals for Legacy PCs (FLP) 作为软件保证的一个组件来授权使用，主要设计用于此类特定情形。图 3 显示了 Windows FLP 的安装屏幕，它为用户提供四个可供选择的配置选项：“Minimum”（最小化）、“Typical”（典型）、“Full”（完全）和“Custom”（自定义）。
图 3 Windows FLP 安装
图 3 Windows FLP 安装
Windows FLP 需要 64MB RAM、500MB 或更多硬盘驱动器空间以及 800x600 或更高的显示分辨率。硬盘驱动器空间的实际系统要求取决于选择安装的操作系统组件。
如果希望在原有硬件上使用相对灵活且小型的操作系统，并且已拥有软件保证，则 Windows FLP 是一个不错的选择。有关 Windows FLP 如何帮助您顺利迁移至最新硬件和操作系统的详细信息，请参见 microsoft.com/licensing/sa/benefits/fundamentals.mspx。

简化的 Windows XP
除以上较小型的版本外，Windows XP 自身也非常适合简化应用。如果 RAM 不大，可禁用 Windows 主题和其他类似服务，以省出足够的开销来运行系统。但是，请确保了解所禁用的功能并且不会有损安全性（例如，禁用 Windows 防火墙）。

不起作用的选项
遗憾的是，人们常常会试图让轻量级系统使用许多其他 Windows 选项。接下来介绍一些最明显的选项并说明它们未如预期般起作用的原因。
Windows XP Starter Edition 已简化以用于受限系统，但它主要设计用于开发技术市场并且仅作为来自 OEM 的 Windows 授权副本（安装在此类市场中的新 PC 上）提供。因此，通常不应选择该版本。如果您对该版本感兴趣，可访问以下网址：microsoft.com/presspass/newsroom/winxp/WinXPStarterFS.mspx。
同理，Windows PE 也不是可行的选项。有趣的是，在开发 Windows PE 时，Microsoft 最初是设想将其用作轻量级操作系统。然而，最终它并未设计成轻量级操作系统，而是变成了最小化且注重于部署的预安装环境。例如，Windows PE 除命令提示符外并无其他 shell（而且也无法轻易地添加具有更多功能的 shell），无定义的 API 集，无电源管理，也无音频支持。
简化版 Windows XP 也不是理想的解决方案。我曾经听人建议说裁减 Windows 是一种可行的选择。我不是指简单地关闭服务或禁用服务，而是实际删除应用程序来实现轻量级 Windows 安装。切勿这么做。如果为了精简 Windows 而删除二进制文件，则可能致使其不稳定或不安全。如果需要 Windows 的较小型版本，可使用 Windows XP Embedded。虽然需要进行学习并且需花费一些时间来完善您的映像，但它的功能非常强大，而最重要的一点是它受 Microsoft 的支持。
类似于 Windows XP 的精简版本，使用 Windows 的较早版本似乎很有吸引力，但不利的是这些版本缺少支持、更新和安全性。应使用 Microsoft 已支持的解决方案，它们可满足您的轻量级计算需求，并且可在不牺牲适当功能或安全性的情况下尽可能多地利用您的旧硬件。

Wes Miller 是位于德克萨斯州奥斯汀市的 CoreTrace 公司 (www.CoreTrace.com) 的高级技术产品经理。在此之前，他在 Winternals Software 公司任职，并曾在 Microsoft 担任项目经理。Wes 的联系方式如下：technet@getwired.com。


 领域备注: 为 IT 2.0 做好准备
领域备注
为 IT 2.0 做好准备
Romi Mahajan

在 《The Life of Reason》一书中，伟大的哲学家兼作家 George Santayana 曾写道“不记得过去的人将重犯过去的错误”，即深刻检讨过去的错误对于积极创造更好的未来而言极其重要。在政治、文化、历史甚至科学领域中都贯彻着这一理念。事实上，“从错误中学习”这一观点非常常见，甚至已成为一句俗语“吃一堑长一智”。但在我们这些从事信息技术的人中，又有多少人曾真正地考虑到过去 — 并从中学习了经验教训呢？如果不这么做，我们又将如何来应对未来的 IT 世界呢？而未来的 IT 世界又会是什么样子？
那么让我们利用记忆的力量来猜猜看。在过去的 30 年间，发生了许多深刻的变革。IT 已从大型机发展为基于浏览器的计算，从设备集中发展到设备扩散、从不成熟且少见发展到非常专业化且常见，从相对简单发展到异常复杂。以此类推，我们可预期 IT 会变得更加复杂、更加专业化且更加大众化。IT 还需为数量和种类不断增多的设备及平台提供支持。而所有这些都需要比以往更加细致的规划。
这些观点是否已获得普遍认可？还早得很。
以我最近在 2007 年 11 月的技术大会中主持的一次“IT 消费化”座谈会为例。座谈前提非常简单：商业技术和消费者技术之间的界限已经淡化，消费者应用程序和设备正引领着 IT 的发展，并且 IT 部门需要增加对 Facebook、iTune 和 BlackBerry 所代表现象的支持。太简单了吧？显而易见？老生常谈？
可是，根据与会者们的反应来看，完全不是这样。在 100 名与会者中，只有 4 人提到自己曾经使用过 Facebook。一名与会者说：“那是年轻人的玩意儿。”座谈小组中的一位成员就回问：“哦，难道您 IT 部门的员工不够年轻，所以才不使用 Facebook 的吗？”结果引起混乱而无法继续讨论。与会的 IT 经理当中仅有少数人认为有必要雇用一些特定人员，因为这些人员了解如何构建和支持新平台上的应用程序和设备，而这些工作往往会耗费大量技术时间。
当问及如何构建有效的 IT 策略来管理移动电话和笔记本电脑之类既可家用也可商用的设备的使用和安全性时，大家都各持己见，且很少触及实质性问题。某人将常见的想法总结为：在严峻的当前 IT 环境下，“如果在我的办公室中有人将 MP3 播放器插入工作用的笔记本电脑，或者意外将工作用的移动电话遗落在酒吧中，我会立即解雇他。”
噢，天哪。试试看吧。
另一个可察觉到此类思想贫乏性的地方是在对于 IT 负责人而言非常枯燥的会议中。如果我再看到某个会议记录的主题是讨论类似“IT 业务一致性”或“常见记分卡”之类含糊不清的概念，我想我是不会参加的。为什么没有更多的人问问未来的 IT 究竟是什么样子，以及我们需做些什么才能处于领先地位？为什么我们不问问新一代的 IT 专业人员们需要具备哪些技能和态度才能创造出美好的未来呢？为什么我们不为这样的事实 — 没有任何一家公司将其 IT 部门的发展提高到与创新性公司对于其研发部门的重视程度相同的高度上来 — 而感到悲哀呢？与其去辩论集中化还是分散化，何不紧抓 IT 极权化与 IT 大众化这一实际问题进行讨论呢？
我们必须关注我们的未来，这样才能多关爱自己一些。我们都听说过 Web 2.0。如果意识到与技术潜力类似的任何问题，则正是开始思考未来 IT 趋势的时刻。

Romi Mahajan 是 Microsoft“技术听众和平台市场营销”团队的主管。Romi 曾在政治、环境、技术以及社会学等诸多领域发表过多篇文章。


 Windows 机密: Beta（测试版）如何成为 RC（候选发布版）
Windows 机密
Beta（测试版）如何成为 RC（候选发布版）
Raymond Chen

回忆往事 Windows® 产品的预发布版本遵循相当标准的过程。首先是 alpha 版本，该版本供内部使用，并有可能与 Windows 产品团队之外的软件开发合作伙伴共享。
alpha 版本之后自然是 beta 版本，该版本将发送给更多用户使用。alpha 和 beta 版本用户之间的主要区别在于：beta 版本的发布对象包括非软件开发人员，例如喜欢测试预发布软件的最终用户，以及希望率先开始评估新 OS 以确定新产品不仅与关键的内部应用程序兼容，而且也与公司网络、标准硬件配置和系统管理工具兼容的公司。
最后，将是候选发布版。顾名思义，候选发布版即最终版本的候选代码版本。换句话说，“如果一切顺利，我们将发布该版本”。如果发现一些严重错误导致此预期无法实现，则会尽快修复该错误，并构建新的候选发布版，然后再次启动测试环节。Windows 95 发布的是其第六个候选发布版。
据我所知，Windows NT® 的员工们也遵守相同的版本命名模式，但他们遇到了一个问题：公司不愿意在 Windows NT 的 beta 版本中测试其关键应用程序。他们的逻辑通常类似于：“为什么要那么麻烦呢？只不过是 beta 版罢了。Beta 版是给那些爱好测试的家伙们准备的。无论如何肯定与最终版不同。如果现在做测试，那只不过是在浪费时间”。
类似地，软件公司也不关注在 Windows NT beta 测试期间发现的问题。“我们不支持 beta 操作系统”，他们会这样回答。
这些公司希望在实际候选发布版完成后再开始认真地进行测试，那时他们将不可避免地发现大量问题。某些问题公司可以自行解决，而其他问题则更加复杂，需要对 Windows NT 与前一版本的操作系统不“完全兼容”的地方进行处理。特定的项目功能可能会在工作时出现少数问题，而且部分此类问题可在很短的时间内解决。但有些问题则非常严重，需要推迟产品发布才可以解决。
这些候选发布版还会得到许多建议。我们曾收到类似这样的反馈：“我们认为如果按照这种方式安排按钮布局，UI 看起来会更好一些”和“如果这条消息换一种说法，我们的员工可能会更清楚地理解其含义”。这些建议如果在 beta 阶段提出，那将是非常好的建议；但是，如果在第一个候选版发布后再提，则此时再更改界面设计就太迟了。因为此时文档和帮助文件均已撰写完毕，产品也已翻译成几十种语言，而且用于手册和产品包装盒的屏幕快照也已经完成布局、转换、分色和印刷等工作。所有这些工作不能因为仅仅移动一个按钮就全部作废，然后再重做。
我回想起在 Windows XP 时代的一次会议上，就曾经为这种最后关头才提出的更改进行过讨论。提议更改要求对一个 20KB 的帮助文件进行修改，以便说明能够与新 UI 相对应。本地化和翻译代表通知我们，在极短的时间限制内重新翻译修改过的帮助文件将花费大量费用。
为消除对 beta 版本不重视的态度，Windows NT 团队求助于“等级扩张”。仍然会有 beta 版本，但最新的 beta 版本在仍有时间（但不多）执行一些微调工作时，将作为候选发布版，而过去的候选发布版则是现在的契约版。术语“契约”很好地传达了版本的真正状态：“该版本现已完成，除非确实遇到紧急情况，否则不要再去修改它”。

Raymond Chen 的网站“The Old New Thing”及同名著作 (Addison-Wesley, 2007) 讲述了 Windows 的发展历程和 Win32 编程。他认为可从中了解自己的风格。