Const ADS_SCOPE_SUBTREE = 2
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Properties("User ID") = "fabrikam\kenmyer"
objConnection.Properties("Password") = "A2sXrco1Fq1#om!"
objConnection.Properties("Encrypt Password") = TRUE
objConnection.Properties("ADSI Flag") = 3
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 " _
& "objectCategory='user'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
Wscript.Echo objRecordSet.Fields("Name").Value
objRecordSet.MoveNext
Loop
方才說過,今天我們指討論這四行用來指定替代憑證的程式碼:
objConnection.Properties("User ID") = "fabrikam\kenmyer"
objConnection.Properties("Password") = "A2sXrco1Fq1#om!"
objConnection.Properties("Encrypt Password") = TRUE
objConnection.Properties("ADSI Flag") = 3
這下面四行程式碼唯有在您需要以替代憑證進行搜尋才會派上用場。也就是說,如果您並不是使用登入 Windows 的憑證,而是另一個使用者帳號來繫結至 Active Directory ,就需要這四行。如果您打算使用目前登入的憑證進行搜尋,只要把這四行程式碼從指令檔中移除就得了。
讀者應該已經猜出來了(物件參考 objConnection 就算是今天的贈品),這四行程式碼和和 ADO (ActiveX Data Objects) Connection物件的四個屬性有關。User ID 和 Password這兩個屬性名符其實,不過是繫結至 Active Directory 所使用的帳號使用者名稱和密碼。本例中使用 domain\user name 語法指定 User ID。我們也可以把使用者名稱指定為登入名稱 (例如,kenmyer) 或使用者的通用主要名稱 (Universal Principal Name,UPN):kenmyer@fabrikam.com,全看讀者的意思。
至於密碼,為了教學方便我們已經把它用硬式編碼插入指令碼。但我們不建議讀者這麼做,每次指令碼執行時應該要要求您輸入密碼。如果您不知道怎麼辦,別擔心,我們會一如往常介紹您逛逛其他的網頁(這次介紹的是《嗨,Scripting Guy!》專欄過去關於提示並遮蓋密碼的文章)。
現在就剩下兩個屬性要對付了。將 Encrypt Password 設定為 True 的目的是告訴指令碼將密碼通過網路傳送時要加密,這個值預設為 False。而 ADSI Flag則是用來指定驗證選項的位元遮罩屬性。值 3 其實是由兩個不同的屬性所構成的位元遮罩值。
常數 |
值 |
strong>說明 |
ADS_SECURE_AUTHENTICATION |
1 |
要求安全驗證。這個旗標設定後,Active Directory 就會使用 Kerberos,並可能搭配 NTLM 來驗證用戶端。 |
ADS_USE_ENCRYPTION |
2 |
要求 ADSI 在網路上交換資料時要使用加密。 |
您可以在 ADSI SDK 中找到更多有關 ADSI 旗標屬性的詳細資訊。
剩下來的就是最後一個動作:設定這四個屬性的值,就可以停手了。
不好意思,現在我們要去休息一下。畢竟我們今天完全沒有預料到要工作嘛!
For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next
得了,這樣就能刪除本機印表機,而不影響網路印表機連線。您現在一定很慶幸詢問的是利用 Windows XP 和 Windows Server 2003 移除本機印表機,無須顧慮早期的作業系統版本。
好啦,我們會看看能否處理 Windows 2000 中的問題,這不是保證,但我們會查一查。 |