您好,KP。多谢您的问题。关于回答,是的,没错,由我们中的一名脚本专家执教的 Colt 联盟棒球队柯克兰火焰队在上周末赢得了市冠军,漂亮地获得了早已是该队囊中之物的常规赛冠军。还有,这场锦标赛的最终比分确实是 13-0。我们还可以为您做些什么?
哦,对了:您的脚本编写问题。(对于不熟悉脚本编写的人,编写脚本是我们用来在棒球赛间隙打发时间的事。)很明显,有一位脚本专家今天并未完全集中精力做自己的工作(尽管我们不知道今天为什么可以是个例外),不过,幸运的是您的问题很容易回答:毕竟,ADSI(用于访问 Active Directory 的脚本编写技术)很酷的一点就是您可以编写 ADSI 脚本,让它来告诉您使用 ADSI 可以编写哪些脚本。例如,此脚本将返回 Computer 类使用的所有属性的名称:
Set objSchema = GetObject("LDAP://schema/computer")
Wscript.Echo "Mandatory attributes"
For Each strAttribute in objSchema.MandatoryProperties
Wscript.Echo strAttribute
Next
Wscript.Echo
Wscript.Echo "Optional attributes"
For Each strAttribute in objSchema.OptionalProperties
Wscript.Echo strAttribute
Next
此脚本首先连接到本地域的 schema,接着绑定 Computer 类。(schema 当然就是主列表,其中详细列出可以存储在 Active Directory 的所有类和其他对象,并列出这些项的所有属性和方法。)做到这一步时,我们会得到 IADsClass 对象的一个实例;正如其名所示,IADsClass 含有关于特定 Active Directory 类的信息。如果需要关于 User 类的信息该怎么办?如果这样,我们可以改为绑定到该类:
Set objSchema = GetObject("LDAP://schema/user")
如果需要关于 organizationalUnit 类的信息,可以使用以下代码:
Set objSchema = GetObject("LDAP://schema/organizationalUnit")
是的,很酷。
因为 IADsClass 是一个类,它有自己的属性集,包括MandatoryProperties 和 OptionalProperties。MandatoryProperties 表示类的每个实例必须拥有的属性(本例为 Computer 类)。对 Active Directory 运行此脚本时即可得到以下必需属性的列表:
cn
instanceType
nTSecurityDescriptor
objectCategory
objectClass
objectSid
sAMAccountName
这些属性的多数都自动由 Active Directory 赋值,但有几个除外 - 如 cn 和 sAMAccountName。这意味着创建新 Computer 对象时,您必须自己给它们赋值;如果您遗漏了一个,比如 sAMAccountName,您的脚本就会无效。
如您所料,MandatoryProperties 存储为数组(因为可能而且将会有多个必需属性);因此我们使用 For Each 循环遍历所有属性,回显每个属性名:
For Each strAttribute in objSchema.MandatoryProperties
Wscript.Echo strAttribute
Next
解答基本上就是这么多了。对 OptionalProperties(Computer 对象可以拥有但并非必须拥有的属性)进行同样的操作,然后任务即告完成。
顺便说一句,如果您查看计算机的可选属性列表,您会看到各种古怪项目。传呼机?家庭电话号码?有多少计算机有自己的传呼机或家庭电话号呢?信不信由您,这相当正常:究其原因是因为 Computer 类由 User 类派生而来。这意味着 Computer 类具有 User 类的所有属性,外加一些特定于计算机的其他属性,如操作系统版本。如果您看到一些与计算机相关的古怪属性 - 姓名缩写?秘书?- 好的,请不必但心。毕竟这些是可选属性,如果您不愿意,可以不管它们。
希望对您有所帮助,KP。好了,谁还想再听些关于柯克兰火焰队的事?有人吗?喂?喂?