Set objUser = GetObject("WinNT://atl-ws-01/kenmyer")
objUser.SetPassword("i5A2sj*!")
以上就是全部的指令碼:連結到使用者帳戶,呼叫 SetPassword 方法,用 SetPassword 傳遞使用者的新密碼。唯一需要小心的是您設定提供者名稱格式的方式。提供者必須是「WinNT」,其中的 W 和 NT 都是大寫字母。如果以其他任何方式寫下此項,例如:winnt,指令碼就會失敗。在 VBScript 之中這是非常重要的罕見例子之一,因為它會區分大小寫。除此之外,並沒有什麼特別的地方。
當然,您可能會認為:「哼,他們從本機使用者指令碼開始,只因為本機使用者帳戶和 Active Directory 使用者帳戶相較之下,實在太簡單了。等著看他們怎樣嘗試變更 Active Directory 使用者帳戶的密碼。」好了,您不用再等待了。以下的指令碼即可變更 fabrikam.com 網域中 kenmyer 使用者帳戶的密碼:
Set objUser = GetObject("LDAP://cn=KenMyer,ou=Finance,dc=fabrikam,dc=com")
objUser.SetPassword("i5A2sj*!")
沒錯:這和變更本機使用者密碼的指令碼驚人地相似。唯一的差別在於我們使用 LDAP 提供者連結到使用者帳戶 (處理 Active Directory 時使用 LDAP 提供者;處理本機帳戶和 Windows NT 4.0 網域時則使用 WinNT 提供者)。而且,理所當然的,實際帳戶的路徑,將會根據帳戶儲存在本機或是 Active Directory 而有所不同。不過除此之外,兩個指令碼是完全相同的。
我們必須指出,您可以運用這些指令碼變更「任何」使用者帳戶,其中也包括本機系統管理員帳戶。只要將 kenmyer 取代為 Administrator 即可:
Set objUser = GetObject("WinNT://atl-ws-01/Administrator")
objUser.SetPassword("i5A2sj*!")
事實上,既然已經談到這裡,不如慷慨地提供您買一送二的專欄。以下是我們經常被詢問的問題:我要如何為組織單位中的所有電腦變更本機系統管理員密碼?好的,以下對您提供答案:
Set objOU = GetObject("LDAP://OU=Finance, DC=fabrikam, DC=com")
objOU.Filter = Array("Computer")
For Each objItem in objOU
strComputer = objItem.CN
Set objUser = GetObject("WinNT://" & strComputer & "/Administrator")
objUser.SetPassword("i5A2sj*!")
Next
那麼我們究竟在這個指令碼做了什麼?我們連結到 fabrikam.com 中的 Finance 組織單位。然後我們將篩選器套用到取回的集合,以確定只會處理電腦帳戶。在套用過篩選器之後,我們以迴圈通過電腦帳戶的集合。我們抓取第一部電腦的 CN (基本上是 NetBIOS 名稱),然後將該名稱儲存在變數 strComputer 之中。然後我們連線到該電腦的 Administrator 帳戶,並且變更密碼。指令碼以迴圈循環並重複處理集合中的第二部電腦,然後繼續以迴圈循環並變更密碼,直到處理過組織單位中的每部電腦。
我們明白您的想法。不過我們不會告訴您的上司這項工作有多容易。就告訴他您已經發現一個方法,可自動變更組織單位中所有電腦本機系統管理員帳戶的密碼,讓您的上司以為您真的是個天才。只需要幾列簡單程式碼就能辦到這點的事實,將會是您我之間的小秘密。(相信我們:我們也從來沒有告訴「自己」的上司這點有多容易!) |