问:
您好,脚本专家!如何确定名为 John Smith 的用户的用户登录名?
-- FR
答:
您好,FR。您知道,我们很愿意告诉您如何确定名为 John Smith 的用户的用户登录名,但是我们不能这样做:因为在我们的某个样例脚本中有一个特定的姓名列表,表示我们只能引用的用户名。遗憾的是,John Smith 不在该列表中,因此我们不能使用他的名字。
是的,对此我们也觉得不舒服,但是我们无能为力。但是要告诉您的是:向您介绍一个确定名为 Ken Myer 的用户的用户登录名的脚本怎么样?是的,我们知道:确实不一样,不是吗?但我们最多只能做到这样了:
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 sAMAccountName FROM 'LDAP://dc=fabrikam,dc=com' WHERE objectCategory='user' " & _
"AND givenName='Ken' AND sn='Myer'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
Wscript.Echo objRecordSet.Fields("sAMAccountName").Value
objRecordSet.MoveNext
Loop
您可能已经发现了,这是一个用于搜索 Active Directory 的脚本。我们不打算逐个解释此脚本中使用的每一行代码,那样会花费太多时间。如果您不熟悉 Active Directory 搜索脚本,建议您看一下我们的两篇“脚本故事”系列文章 Dude:Where's My Printer? 您在此脚本中看到的所有看起来怪怪的东西 - ADsDSOObject、DS_SCOPE_SUBTREE、ADODB.Command - 在这两个专栏中都有详细的解释。
但是,我们将指出与用于进行搜索的查询有关的几件事情。在编写用于搜索 Active Directory 的脚本时,最难的部分也许就是知道要搜索的属性名。例如,您提到的用户登录名。我们知道用户登录名的意思,您也知道用户登录名的意思,但是 Active Directory 不知道用户登录名是什么。Active Directory 会改为调用 sAMAccountName。(注意:尽管字母的大小写无关紧要,但是我们会将此属性名写作 sAMAccountName,仅仅是因为这是该属性的正式名称而已。因而,SQL 查询将检索指定用户的 sAMAccountName。
那么如何指定该用户呢?嗯,我们要查找符合以下三个条件的 Active Directory 对象:
• 是用户帐户。为了将返回的数据限制为用户帐户,我们要搜索 objectCategory 等于 user 的项。
• 名字为 Ken。当然,Active Directory 不知道什么是“名字”。因此,我们需要搜索 givenName 为 Ken 的用户。
• 姓氏为 Myer。正如您所料,Active Directory 也从未听说过“姓氏”一词。因此,我们需要改为搜索 sn(姓)Myer。
将以上所有条件加起来,查询最后将如下所示:
objCommand.CommandText = _
"SELECT sAMAccountName FROM 'LDAP://dc=fabrikam,dc=com' WHERE objectCategory='user' " & _
"AND givenName='Ken' AND sn='Myer'"
剩下的就很容易了。执行此查询,Active Directory 将返回一个记录集,该记录集由 giveName 为 Ken 且 sn 为 Myer 的所有用户组成。然后,设置一个 Do Until 循环来遍历该记录集,并回显每个用户的 sAMAccountName。(理想的情形为,Active Directory 中只有一个 Ken Myer,但是实际上可能会有多个同名同姓的用户。在这种情况下,sAMAccountName 将是一个区别因素,因为 sAMAccountNames 必定是唯一的。)
明白一些了吧?好了,看(不要告诉任何人是我们说的),拿刚才向您介绍的脚本来说,用 John 替换 Ken、用 Smith 替换 Myer,您将得到用于搜索名为 John Smith 的用户的脚本。但是,这只是您和我们之间的秘密,好吗?好
用vbs确定用户的登录名的代码
2020-07-10 18:10脚本之家 VBS
如何确定名为 John Smith 的用户的用户登录名?
延伸 · 阅读
- 2022-06-28分享13个非常有用的Python代码片段
- 2022-06-27Python运行时修改业务SQL代码
- 2022-04-2745个 Git 经典操作场景,专治不会合代码
- 2022-04-26七段小代码,玩转Java程序常见的崩溃场景!
- 2022-04-25VBS 批量Ping的项目实现
- 2022-04-21教你用vbs实现微信自动发送消息功能
- VBS
VBS文本文件操作实现代码
这篇文章主要介绍了VBS文本文件操作实现代码,需要的朋友可以参考下...
- VBS
VBS教程:正则表达式简介 -正则表达式语法
正则表达式语法 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的...
- VBS
灵活实用VBS入门教程应用篇
上一篇文章我们了解了VBS编程的一些基础知识,要更深入地学习还要学习选择结构和循环结构。 ...
- VBS
Adsutil.vbs 在脚本攻击中的妙用[我非我原创]
adsutil.vbs是什么?相信用过IIS的网管员不会不知道。这是IIS自带的提供于命令行下管理IIS的一个脚本。位于%SystemDrive%\Inetpub\AdminScripts目录下。...
- VBS
VBS编程教程 (第1篇)
VBScript的全称是:Microsoft Visual Basic Script Editon.(微软公司可视化BASIC脚本版). 正如其字面所透露的信息, VBS(VBScript的进一步简写)是基于Visual Basic的脚本语言....
- VBS
VBS数组深入浅出
VBS数组在应用中没有像其他语句那么广泛,VBS数组存在不少功能上的局限性(如二维数组的定义、赋值),在使用上也没有java等语言那么便捷...
- VBS
雷客图ASP站长安全助手vbs测试版代码
雷客图ASP站长安全助手是一个基于ASP的帮助站长维护网站安全的程序。这个版本(vbs测试版)主要用于服务器本地运行以查找ASP木马。此版本为测试版,希...
- VBS
WINDOWS脚本实践:为SAP补丁制作的VBS脚本代码
本文主要分享WINDOWS脚本实践:为SAP补丁制作的VBS脚本代码,有需要的童鞋可以参考下...