从发布以来,Windows PowerShell已经成为Windows自动化平台的选择。它的强大和灵活已经在许多环境中被许多Windows技术所证明。不幸的是,在活动目录支持方面,PowerShell 1并没有什么可以炫耀。从基础角度,微软提供了ADSI“类型加速器”作为它的支持。如果你需要去完成多高级任务,就不得不访问提供AD支持的本地.NET类——而这需要更多的超出大部分管理员学习兴趣的高级技能。

但随着Windows 7和Windows Server 2008 R2的发布,PowerShell对AD完全支持的期待告一段落。微软在新的版本中已经发布了一个AD模块和PowerShell驱动提供程序,使得可以通过PowerShell管理单元管理AD。

如何安装

如果你安装一个Windows Server 2008 R2与控制器通过使用服务器管理添加活动目录服务角色,AD PowerShell模块将被默认安装。但是,如果你想在你的Windows 7工作站上安装这个模块(模块是PowerShell cmdlet、提供程序、脚本等的集合),你需要安装服务器远程管理工具(RSAT)。

一旦你安装完毕RSAT,请打开控制面板的程序和功能类别,选择打开或关闭Windows功能的RSAT节点。展开,转到Windows PowerShell活动目录模块节点,如图所示。选择复选框,点击是添加该模块。

 

PowerShell与活动目录_活动

模块被安装之后,你既可以从开始菜单、程序、管理工具组选择Windows PowerShell活动目录模块,又可以通过键入如下命令很容易的把它添加到你现有的PowerShell会话中:

Import-module ActiveDirectory

在短暂的闪烁之后,提示符将返回,然后你将可以访问PowerShell和AD所提供的所有强大功能。不过,在我们开始使用PowerShell的AD模块之前,让我再来补充一条重要信息。不同于之前任何基于PowerShell的AD自动化实现,这个新的模块要求在你的域中至少有一台域控制器运行新的活动目录Web服务(ADWS)。ADWS默认在R2的域控制器上安装,但你在Windows Server 2003或Windows Server 2008域控制器上需要特殊的附件才能使用这个模块。

如果你在你的域中没有ADWS服务器,当你在PowerShell中试图导入AD模块时会出现错误。一般而言,对ADWS和这些PowerShell cmdlet最有趣的事,是它们都不使用LDAP和AD沟通。具体而言,它们使用基于XML Web服务的协议与AD交互。对以前的AD管理工具集而言,这是一个意义重大的改变,并且观察微软在未来的AD管理工具中是否延续这个趋势是很有趣的。注意如果你在非R2的域控制器中安装了ADWS,你将依然可以使用常规的基于LDAP的工具如‘活动目录用户和计算机’来管理这些服务器。

使用cmdlet

在你安装完成这些cmdlet并有一台运行ADWS的DC之后,你就可以开始探索PowerShell对AD的强大威力。微软为使用PowerShell对AD进行自动化管理提供了两个主要工具。第一个工具是一系列cmdlet,可以让你通过查找AD对象做你想做的一切,如创建计算机账号、更改账号等。第二个工具是一个针对AD的PowerShell驱动提供程序,可以让你像一个文件系统一样导航AD。这个工具交互式使用具有强大的能力,我将为你展示一些你可以对AD进行的很棒的操作。

让我们开始看看一些AD cmdlet。如果你想得到一个活动目录 PowerShell模块中所有AD相关的cmdlet列表,打开PowerShell并键入如下命令:

get-command -module ActiveDirectory

这将返回一个有76个cmdlet名字的清单,它们是AD模块的一部分。正如你从清单中看到的,有一些显眼的cmdlet,如检索组成员的Get-ADGroupMember和为域添加计算机账号的New-ADComputer。让我们看看你如何使用这几个命令。比方说,你想快速检索你域中“Marketing Users”组的成员列表。你可以使用如下cmdlet轻松完成:

get-ADGroupMember -identity "Marketing Users"

参数identity作为引用一个特定对象的方式在整个AD cmdlet中很常见。Identity参数可以采取一个可分辨名称(如,DC=cpand1,DC=com),一个对象GUID或者samAccountName的形式。

PowerShell和这些AD cmdlet的另一个强大特性,是能够通过管道把输出从一个cmdlet传递到另一个。例如,假设你想在AD中查找一个用户对象,然后禁用该用户对象。你知道用户的samAccountName是kmyer,所以你可以使用下面的两个cmdlet完成这个任务:

get-ADUser -identity kmyer | Set-ADUser -enabled $false

在这个例子中,我们使用get-ADUser cmdlet搜索samAccounName为kmyer的用户账号。只要我们找到那个用户,我们使用管道把它传递给Set-ADUser cmdlet,并给他赋予带有$false标记的-enabled参数来禁用账号。

这是一个简单的例子,说明了PowerShell和AD cmdlet的威力和简洁。由于这个模块中有76个cmdlet,你可以想想你能使用这个功能做得更多。让我们来看看另一个功能更多更值得讨论的模块:活动目录PowerShell驱动提供程序。

活动目录PowerShell驱动提供程序

什么是活动目录PowerShell驱动提供程序?PowerShell支持资源管理的概念,这就像驱动器卷一样。正如你可以使用cd进入一个文件夹一样,PowerShell驱动提供程序可以让你以同样的方式浏览其他类型的资源。例如,在PowerShell 1中,微软提供了一个注册表PowerShell驱动,因此你可以像对待文件夹和文件一样对待注册表键。你可以在PowerShell中改变路径到HKEY_LOCAL_MACHINE,然后导航到键,使用类似于你在文件系统中使用的命令添加或删除键和值。微软已经提供了一个AD的PowerShell驱动程序和cmdlet共同使用。这个PowerShell驱动提供程序让你像对待文件系统一样对待你的AD层次结构。要使用这个功能,打开PowerShell并加载AD模块,然后键入:

Cd AD:

你会发现驱动提示发生了改变以反映你新的工作路径。如果从此处键入dir,你会得到你当前AD林所有分区的列表。我们假设你想导航到你的域,并创建一个新的OU。在AD的最高层次:驱动提示上下文中键入(以你AD域的目录名称取代DC=cpandl,DC=com):

cd “DC=cpandl,DC=com”

现在假设我们想在Marketing OU下创建一个新的HR OU。更改到Marketing OU文件夹,键入:

cd “OU=Marketing”

最后,在Marketing OU下创建HR OU,键入:

Md “OU=HR”