Set objUser = GetObject("LDAP://CN=myerken,OU=management,DC=Fabrikam,DC=com")
Wscript.Echo "Password last changed: " & objUser.PasswordLastChanged
沒錯,這就是整個指令碼。咱們可不像某些網站,只讓您看開頭的部份,其餘部份則要付費才能瀏覽 (雖然我們也開始考慮這麼做了…)。如果我們想知道前次 Ken Myer 變更密碼的時間,只要執行下面兩個動作即可:
- 連結到 Ken 在 Active Directory 的使用者帳戶。
- 回應 PasswordLastChanged 屬性的值。
這樣就行了,真的。
當然嘍,我們假設您所指的是 Active Directory 使用者帳戶;您也可能是指 Windows NT 4.0 使用者帳戶,或甚至是本機使用者帳戶。真是這樣的話,就有點問題了。畢竟您得使用 WinNT 提供者來存取 NT 4.0 或本機使用者帳戶,而 WinNT 提供者並不支援 PasswordLastChanged 屬性。
因此,如果您真的是指 NT 4.0 或本機使用者帳戶的話,就準備看我們出洋相了是嗎?那麼,您就太小看我們了:
strComputer = "atl-ws-01"
Set objUser = GetObject("WinNT://" & strComputer & "/kenmyer")
intPasswordAge = objUser.PasswordAge
intPasswordAge = intPasswordAge * -1
dtmChangeDate = DateAdd("s", intPasswordAge, Now)
WScript.Echo "Password last changed: " & dtmChangeDate
如您所見,這個指令碼雖然有點長,不過卻很簡單。一開始我們先連接到 Ken Myer 帳戶 (在電腦 atl-ws-01 的使用者名稱是 kenmyer)。(萬一您連接的是 NT 4.0 網域時怎麼辦?別怕;只要把 atl-ws-01 換成該網域的名稱就行了)。接著就抓取 PasswordAge 屬性的值,將它儲存在一個名叫 intPasswordAge 的變數。
為什麼我們不乾脆回應 PasswordAge 的值就好?那是因為 PasswordAge 實際代表的是自從前次變更密碼以來所經歷的秒數。假設您得到這樣的答覆:
50725249
您有本事用心算,把目前的日期和時間減掉 50725249 秒,再計算前次變更密碼的時間嗎?
如果真的算得出來,算您厲害!我們的確沒這個本事,不過,交給指令碼做總可以吧。我們先把 intPasswordAge 的值乘以 -1:
intPasswordAge = intPasswordAge * -1
為什麼這麼做?因為我們即將在下一行程式碼,使用 DateAdd 函數來判斷前次設定密碼的日期。因此必須在 DateAdd 代入三個參數:
- 我們要處理的時段。因為 PasswordAge 是以秒為單位,因此我們以「s」作為第一個參數。
- 要加到目前日期的秒數。這也是我們把 intPasswordAge 乘以 -1 的原因。我們不是真的要把 intPasswordAge 加到目前日期 (這個動作會在將來某處傳回一個時間),而是把目前時間減掉 intPasswordAge,畢竟 intPasswordAge 是指前次變更密碼之後所經歷的秒數。由於加入負數跟減掉正數的意思一樣,因此我們把 intPasswordAge 乘以 -1。
- 目前日期和時間。此值我們用 VBScript 函數 Now 來表示。
好啦,方程式的結果是儲存在變數 dtmChangeDate 中,我們會在程式碼的最後一行回應該變數的值。我們在建立和測試這個指令碼時,它就會告訴我們密碼前次變更的時間是 11/22/2003 的 12:02:10 PM。(同時還會「說教」一番,說我們沒好好更新本機使用者的帳戶密碼)。 |