快速业务通道

用vbs确定用户的登录名的代码

作者 佚名 来源 ASP编程 浏览 发布时间 2013-07-09
问:
您好,脚本专家!如何确定名为JohnSmith的用户的用户登录名?

--FR

答:
您好,FR。您知道,我们很愿意告诉您如何确定名为JohnSmith的用户的用户登录名,但是我们不能这样做:因为在我们的某个样例脚本中有一个特定的姓名列表,表示我们只能引用的用户名。遗憾的是,JohnSmith不在该列表中,因此我们不能使用他的名字。

是的,对此我们也觉得不舒服,但是我们无能为力。但是要告诉您的是:向您介绍一个确定名为KenMyer的用户的用户登录名的脚本怎么样?是的,我们知道:确实不一样,不是吗?但我们最多只能做到这样了:

OnErrorResumeNext

ConstADS_SCOPE_SUBTREE=2

SetobjConnection=CreateObject("ADODB.Connection")
SetobjCommand=CreateObject("ADODB.Command")
objConnection.Provider="ADsDSOObject"
objConnection.Open"ActiveDirectoryProvider"
SetobjCommand.ActiveConnection=objConnection

objCommand.Properties("PageSize")=1000
objCommand.Properties("Searchscope")=ADS_SCOPE_SUBTREE

objCommand.CommandText=_
"SELECTsAMAccountNameFROM''LDAP://dc=fabrikam,dc=com''WHEREobjectCategory=''user''"&_
"ANDgivenName=''Ken''ANDsn=''Myer''"
SetobjRecordSet=objCommand.Execute

objRecordSet.MoveFirst
DoUntilobjRecordSet.EOF
Wscript.EchoobjRecordSet.Fields("sAMAccountName").Value
objRecordSet.MoveNext
Loop

您可能已经发现了,这是一个用于搜索ActiveDirectory的脚本。我们不打算逐个解释此脚本中使用的每一行代码,那样会花费太多时间。如果您不熟悉ActiveDirectory搜索脚本,建议您看一下我们的两篇“脚本故事”系列文章Dude:Where''sMyPrinter?您在此脚本中看到的所有看起来怪怪的东西-ADsDSOObject、DS_SCOPE_SUBTREE、ADODB.Command-在这两个专栏中都有详细的解释。

但是,我们将指出与用于进行搜索的查询有关的几件事情。在编写用于搜索ActiveDirectory的脚本时,最难的部分也许就是知道要搜索的属性名。例如,您提到的用户登录名。我们知道用户登录名的意思,您也知道用户登录名的意思,但是ActiveDirectory不知道用户登录名是什么。ActiveDirectory会改为调用sAMAccountName。(注意:尽管字母的大小写无关紧要,但是我们会将此属性名写作sAMAccountName,仅仅是因为这是该属性的正式名称而已。因而,SQL查询将检索指定用户的sAMAccountName。

那么如何指定该用户呢?嗯,我们要查找符合以下三个条件的ActiveDirectory对象:

•是用户帐户。为了将返回的数据限制为用户帐户,我们要搜索objectCategory等于user的项。

•名字为Ken。当然,ActiveDirectory不知道什么是“名字”。因此,我们需要搜索givenName为Ken的用户。

•姓氏为Myer。正如您所料,ActiveDirectory也从未听说过“姓氏”一词。因此,我们需要改为搜索sn(姓)Myer。


将以上所有条件加起来,查询最后将如下所示:

objCommand.CommandText=_
"SELECTsAMAccountNameFROM''LDAP://dc=fabrikam,dc=com''WHEREobjectCategory=''user''"&_
"ANDgivenName=''Ken''ANDsn=''Myer''"

剩下的就很容易了。执行此查询,ActiveDirectory将返回一个记录集,该记录集由giveName为Ken且sn为Myer的所有用户组成。然后,设置一个DoUntil循环来遍历该记录集,并回显每个用户的sAMAccountName。(理想的情形为,ActiveDirectory中只有一个KenMyer,但是实际上可能会有多个同名同姓的用户。在这种情况下,sAMAccountName将是一个区别因素,因为sAMAccountNames必定是唯一的。)

明白一些了吧?好了,看(不要告诉任何人是我们说的),拿刚才向您介绍的脚本来说,用John替换Ken、用Smith替换Myer,您将得到用于搜索名为JohnSmith的用户的脚本。但是,这只是您和我们之间的秘密,好吗?好

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号