用vbs確定用戶(hù)的登錄名的代碼
更新時(shí)間:2007年03月31日 00:00:00 作者:
問(wèn):
您好,腳本專(zhuān)家!如何確定名為 John Smith 的用戶(hù)的用戶(hù)登錄名?
-- FR
答:
您好,F(xiàn)R。您知道,我們很愿意告訴您如何確定名為 John Smith 的用戶(hù)的用戶(hù)登錄名,但是我們不能這樣做:因?yàn)樵谖覀兊哪硞€(gè)樣例腳本中有一個(gè)特定的姓名列表,表示我們只能引用的用戶(hù)名。遺憾的是,John Smith 不在該列表中,因此我們不能使用他的名字。
是的,對(duì)此我們也覺(jué)得不舒服,但是我們無(wú)能為力。但是要告訴您的是:向您介紹一個(gè)確定名為 Ken Myer 的用戶(hù)的用戶(hù)登錄名的腳本怎么樣?是的,我們知道:確實(shí)不一樣,不是嗎?但我們最多只能做到這樣了:
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
您可能已經(jīng)發(fā)現(xiàn)了,這是一個(gè)用于搜索 Active Directory 的腳本。我們不打算逐個(gè)解釋此腳本中使用的每一行代碼,那樣會(huì)花費(fèi)太多時(shí)間。如果您不熟悉 Active Directory 搜索腳本,建議您看一下我們的兩篇“腳本故事”系列文章 Dude:Where's My Printer? 您在此腳本中看到的所有看起來(lái)怪怪的東西 - ADsDSOObject、DS_SCOPE_SUBTREE、ADODB.Command - 在這兩個(gè)專(zhuān)欄中都有詳細(xì)的解釋。
但是,我們將指出與用于進(jìn)行搜索的查詢(xún)有關(guān)的幾件事情。在編寫(xiě)用于搜索 Active Directory 的腳本時(shí),最難的部分也許就是知道要搜索的屬性名。例如,您提到的用戶(hù)登錄名。我們知道用戶(hù)登錄名的意思,您也知道用戶(hù)登錄名的意思,但是 Active Directory 不知道用戶(hù)登錄名是什么。Active Directory 會(huì)改為調(diào)用 sAMAccountName。(注意:盡管字母的大小寫(xiě)無(wú)關(guān)緊要,但是我們會(huì)將此屬性名寫(xiě)作 sAMAccountName,僅僅是因?yàn)檫@是該屬性的正式名稱(chēng)而已。因而,SQL 查詢(xún)將檢索指定用戶(hù)的 sAMAccountName。
那么如何指定該用戶(hù)呢?嗯,我們要查找符合以下三個(gè)條件的 Active Directory 對(duì)象:
• 是用戶(hù)帳戶(hù)。為了將返回的數(shù)據(jù)限制為用戶(hù)帳戶(hù),我們要搜索 objectCategory 等于 user 的項(xiàng)。
• 名字為 Ken。當(dāng)然,Active Directory 不知道什么是“名字”。因此,我們需要搜索 givenName 為 Ken 的用戶(hù)。
• 姓氏為 Myer。正如您所料,Active Directory 也從未聽(tīng)說(shuō)過(guò)“姓氏”一詞。因此,我們需要改為搜索 sn(姓)Myer。
將以上所有條件加起來(lái),查詢(xún)最后將如下所示:
objCommand.CommandText = _
"SELECT sAMAccountName FROM 'LDAP://dc=fabrikam,dc=com' WHERE objectCategory='user' " & _
"AND givenName='Ken' AND sn='Myer'"
剩下的就很容易了。執(zhí)行此查詢(xún),Active Directory 將返回一個(gè)記錄集,該記錄集由 giveName 為 Ken 且 sn 為 Myer 的所有用戶(hù)組成。然后,設(shè)置一個(gè) Do Until 循環(huán)來(lái)遍歷該記錄集,并回顯每個(gè)用戶(hù)的 sAMAccountName。(理想的情形為,Active Directory 中只有一個(gè) Ken Myer,但是實(shí)際上可能會(huì)有多個(gè)同名同姓的用戶(hù)。在這種情況下,sAMAccountName 將是一個(gè)區(qū)別因素,因?yàn)?nbsp;sAMAccountNames 必定是唯一的。)
明白一些了吧?好了,看(不要告訴任何人是我們說(shuō)的),拿剛才向您介紹的腳本來(lái)說(shuō),用 John 替換 Ken、用 Smith 替換 Myer,您將得到用于搜索名為 John Smith 的用戶(hù)的腳本。但是,這只是您和我們之間的秘密,好嗎?好
您好,腳本專(zhuān)家!如何確定名為 John Smith 的用戶(hù)的用戶(hù)登錄名?
-- FR
答:
您好,F(xiàn)R。您知道,我們很愿意告訴您如何確定名為 John Smith 的用戶(hù)的用戶(hù)登錄名,但是我們不能這樣做:因?yàn)樵谖覀兊哪硞€(gè)樣例腳本中有一個(gè)特定的姓名列表,表示我們只能引用的用戶(hù)名。遺憾的是,John Smith 不在該列表中,因此我們不能使用他的名字。
是的,對(duì)此我們也覺(jué)得不舒服,但是我們無(wú)能為力。但是要告訴您的是:向您介紹一個(gè)確定名為 Ken Myer 的用戶(hù)的用戶(hù)登錄名的腳本怎么樣?是的,我們知道:確實(shí)不一樣,不是嗎?但我們最多只能做到這樣了:
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
您可能已經(jīng)發(fā)現(xiàn)了,這是一個(gè)用于搜索 Active Directory 的腳本。我們不打算逐個(gè)解釋此腳本中使用的每一行代碼,那樣會(huì)花費(fèi)太多時(shí)間。如果您不熟悉 Active Directory 搜索腳本,建議您看一下我們的兩篇“腳本故事”系列文章 Dude:Where's My Printer? 您在此腳本中看到的所有看起來(lái)怪怪的東西 - ADsDSOObject、DS_SCOPE_SUBTREE、ADODB.Command - 在這兩個(gè)專(zhuān)欄中都有詳細(xì)的解釋。
但是,我們將指出與用于進(jìn)行搜索的查詢(xún)有關(guān)的幾件事情。在編寫(xiě)用于搜索 Active Directory 的腳本時(shí),最難的部分也許就是知道要搜索的屬性名。例如,您提到的用戶(hù)登錄名。我們知道用戶(hù)登錄名的意思,您也知道用戶(hù)登錄名的意思,但是 Active Directory 不知道用戶(hù)登錄名是什么。Active Directory 會(huì)改為調(diào)用 sAMAccountName。(注意:盡管字母的大小寫(xiě)無(wú)關(guān)緊要,但是我們會(huì)將此屬性名寫(xiě)作 sAMAccountName,僅僅是因?yàn)檫@是該屬性的正式名稱(chēng)而已。因而,SQL 查詢(xún)將檢索指定用戶(hù)的 sAMAccountName。
那么如何指定該用戶(hù)呢?嗯,我們要查找符合以下三個(gè)條件的 Active Directory 對(duì)象:
• 是用戶(hù)帳戶(hù)。為了將返回的數(shù)據(jù)限制為用戶(hù)帳戶(hù),我們要搜索 objectCategory 等于 user 的項(xiàng)。
• 名字為 Ken。當(dāng)然,Active Directory 不知道什么是“名字”。因此,我們需要搜索 givenName 為 Ken 的用戶(hù)。
• 姓氏為 Myer。正如您所料,Active Directory 也從未聽(tīng)說(shuō)過(guò)“姓氏”一詞。因此,我們需要改為搜索 sn(姓)Myer。
將以上所有條件加起來(lái),查詢(xún)最后將如下所示:
objCommand.CommandText = _
"SELECT sAMAccountName FROM 'LDAP://dc=fabrikam,dc=com' WHERE objectCategory='user' " & _
"AND givenName='Ken' AND sn='Myer'"
剩下的就很容易了。執(zhí)行此查詢(xún),Active Directory 將返回一個(gè)記錄集,該記錄集由 giveName 為 Ken 且 sn 為 Myer 的所有用戶(hù)組成。然后,設(shè)置一個(gè) Do Until 循環(huán)來(lái)遍歷該記錄集,并回顯每個(gè)用戶(hù)的 sAMAccountName。(理想的情形為,Active Directory 中只有一個(gè) Ken Myer,但是實(shí)際上可能會(huì)有多個(gè)同名同姓的用戶(hù)。在這種情況下,sAMAccountName 將是一個(gè)區(qū)別因素,因?yàn)?nbsp;sAMAccountNames 必定是唯一的。)
明白一些了吧?好了,看(不要告訴任何人是我們說(shuō)的),拿剛才向您介紹的腳本來(lái)說(shuō),用 John 替換 Ken、用 Smith 替換 Myer,您將得到用于搜索名為 John Smith 的用戶(hù)的腳本。但是,這只是您和我們之間的秘密,好嗎?好
相關(guān)文章
VBS教程:VBscript語(yǔ)句-For Each...Next 語(yǔ)句
VBS教程:VBscript語(yǔ)句-For Each...Next 語(yǔ)句...2006-11-11
VBS教程:VBscript語(yǔ)句-Function 語(yǔ)句
VBS教程:VBscript語(yǔ)句-Function 語(yǔ)句...2006-11-11
VBS教程:VBScript 基礎(chǔ)-VBScript編碼約定
VBS教程:VBScript 基礎(chǔ)-VBScript編碼約定...2006-11-11
vbs腳本 加密 幾個(gè)小細(xì)節(jié)小結(jié)下
加密的vbs腳本拖到這個(gè)腳本上就行了。網(wǎng)上有位朋友問(wèn)我這個(gè)問(wèn)題,我由于今天才上email看了下文件,發(fā)現(xiàn)下面的問(wèn)題,說(shuō)實(shí)話(huà)對(duì)于他要問(wèn)的我和你清楚,我不太會(huì)寫(xiě)呢,不是出于技術(shù)問(wèn)題,是出于已經(jīng)沒(méi)了這份愛(ài)好。出于對(duì)朋友學(xué)習(xí)的理解,我給解決了幾個(gè)問(wèn)題,下面總結(jié)下。并給出正確的代碼。2008-01-01
用vbs實(shí)現(xiàn)按創(chuàng)建日期的順序列出一個(gè)文件夾中的所有文件
用vbs實(shí)現(xiàn)按創(chuàng)建日期的順序列出一個(gè)文件夾中的所有文件...2007-03-03
vbscript和javascript版的15位, 18位的身份證號(hào)碼的驗(yàn)證函數(shù).以及根據(jù)身份證取省份,生日,
vbscript和javascript版的15位, 18位的身份證號(hào)碼的驗(yàn)證函數(shù).以及根據(jù)身份證取省份,生日,性別2007-04-04

