谁希望成为脚本专家?

每周脚本测验题

每周脚本测验题

2006 年 3 月 24 日:用户?计算机?他们一样吗


大多数情况下,我们从来不会将计算机误认为用户,也不会将用户误认为计算机。(嗯,Mary Ellen 也许是在会计部工作。不过事实并非如此,而且永远也不会那样。)

但遗憾的是,我们的脚本似乎相当不易于辨别:看起来脚本认为用户和计算机之间没有区别。我们是如何知道这些的呢?嗯,当我们最终开始从 Windows NT 4.0 转换为 Windows Server 2003 时,我们建立了一个 Active Directory 测试域。作为测试流程的一部分,我们创建了一些用户帐户和一些计算机帐户;特别是,我们创建了下面的帐户:

帐户名

帐户类型

atl-ws-01

Computer

atl-ws-02

Computer

Ken Myer

User

Pilar Ackerman

User

至此不会有什么问题。因为脚本专家曾告诉我们脚本是管理 Active Directory 的非常有用的工具,因此我们坐下来写些脚本试一试我们的测试域。我们假定其中一个脚本非常有用;此脚本可返回域中的所有用户帐户列表:

On Error Resume Next

Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

objCommand.CommandText = _
    "SELECT Name FROM 'LDAP://dc=fabrikam,dc=com' WHERE objectClass='user'"  
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    Wscript.Echo objRecordSet.Fields("Name").Value
    objRecordSet.MoveNext
Loop

正如我们所说的那样,我们假定此脚本非常有用;遗憾的是,结果却并非确实如此。为什么?嗯,下面是我们运行脚本后所返回的项目,它是一个用于返回域中所有用户帐户列表的脚本(我们提醒您):

atl-ws-01
atl-ws-02
Ken Myer
Pilar Ackerman

如您所见,我们确实返回了所有用户帐户列表;但是,我们也返回了所有计算机帐户列表。我们曾认为这样没问题;显然 Active Directory 只是无法区分用户帐户和计算机帐户。这确实是高见;但却是完全错误的。我们修改了脚本使它只返回计算机帐户,然后将其重新运行。重新运行后我们返回 … 只有计算机帐户:

atl-ws-01
atl-ws-02

显然,计算机就是用户,而用户却不是计算机。这看起来并不公平(尤其是对 Mary Ellen 而言);而且,它看起来也不正确。

这个脚本的问题到底出在哪儿?


返回页首返回页首