Share via


嗨,Scripting Guy!

Hey,Scripting Guy!

歡迎使用全新的 TechNet 專欄,Microsoft Scripting Guy 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

今天的問題:我要如何變更使用者的密碼?


我要如何變更使用者的密碼?

嗨,Scripting Guy!我要如何變更使用者的密碼?

-- GO

GO,您好。您沒有指出是要變更本機使用者或 Active Directory 使用者的密碼。不過沒關係:兩者的程序非常相似,因此我們將會向您示範如何進行這兩者。這就像得到買一送一的「嗨,Scripting Guy!」專欄一樣。

無論是要變更本機使用者密碼,或變更 Active Directory 使用者密碼,您都必須通過含有 2 個步驟的程序。首先您連結到要變更密碼的使用者帳戶,然後使用 ADSI 的 SetPassword 方法指派新的密碼給使用者。就是這麼簡單:只要 2 個步驟就能完成。

為了證明這點,讓我們從變更本機使用者的密碼開始。在下列指令碼中,我們連結到 atl-ws-01 電腦上的 kenmyer 使用者帳戶,並對 Ken 指派 i5a2sj*! 的密碼:

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 帳戶,並且變更密碼。指令碼以迴圈循環並重複處理集合中的第二部電腦,然後繼續以迴圈循環並變更密碼,直到處理過組織單位中的每部電腦。

我們明白您的想法。不過我們不會告訴您的上司這項工作有多容易。就告訴他您已經發現一個方法,可自動變更組織單位中所有電腦本機系統管理員帳戶的密碼,讓您的上司以為您真的是個天才。只需要幾列簡單程式碼就能辦到這點的事實,將會是您我之間的小秘密。(相信我們:我們也從來沒有告訴「自己」的上司這點有多容易!)


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首