用vbscript防止本地用戶更改其密碼
問:
嗨,Scripting Guy!如何配置本地用戶帳戶以使該用戶無法更改其密碼?
-- DC
答:
嗨,DC。這其中的秘密就在于神秘的 userFlags 屬性。我們先向您介紹如何設(shè)置用戶帳戶以使用戶無法更改其密碼,然后介紹可以使用 userFlags 屬性管理的一些其他本地用戶帳戶屬性。運氣好的話,還可以趕上吃午餐哩!
我們先來介紹可以防止用戶更改其密碼的腳本:
復(fù)制代碼 代碼如下:
Const ADS_UF_PASSWD_CANT_CHANGE = &H0040
Set objUser = GetObject("WinNT://atl-ws-01/kenmyer")
If Not objUser.UserFlags AND ADS_UF_PASSWD_CANT_CHANGE Then
objPasswordNoChangeFlag = objUser.UserFlags XOR ADS_UF_PASSWD_CANT_CHANGE
objUser.Put "userFlags", objPasswordNoChangeFlag
objUser.SetInfo
End If
首先,定義一個常量(它有一個好記的名稱 ADS_UF_PASSWD_CANT_CHANGE),我們需要用它來標(biāo)識 userFlags 屬性內(nèi)的正確“開關(guān)”。userFlags 屬性是一種位掩碼屬性示例,它包含多個屬性和屬性值。姑且將位掩碼視為一組開關(guān),每個開關(guān)表示一種不同的屬性。如果將“用戶不能更改密碼”開關(guān)打開,則用戶無法更改其密碼;如果將開關(guān)關(guān)閉,則用戶可以 更改其密碼。這部分內(nèi)容還算淺顯易懂;位掩碼唯一不好處理的地方是,“開關(guān)”名稱可不像“用戶不能更改密碼”這樣好記,它們使用的是類似于 &H0040 的十六進制值。要執(zhí)行這項任務(wù),我們需要切換“&H0040”開關(guān),這就是我們定義這一常量的原因。
接下來,連接到計算機 atl-ws-01 上的 kenmyer 帳戶。此時,我們檢查相關(guān)開關(guān)是否已打開。在使用位掩碼時,您通常會看到類似下面的代碼:
If objUser.UserFlags AND ADS_UF_PASSWD_CANT_CHANGE Then
我們可以用淺顯的語言來說明以上代碼:如果存在 userFlags 屬性,并且打開了 ADS_UF_PASSWD_CANT_CHANGE 開關(guān),則該語句為真,并且應(yīng)執(zhí)行某種操作。就這項任務(wù)而言,我們并不關(guān)心處于打開狀態(tài)的開關(guān);如果設(shè)置了“不能更改密碼”標(biāo)志,我們的工作即告完成。我們只關(guān)心處于關(guān)閉狀態(tài)的開關(guān)。因此,我們編寫了下面這行代碼;只有當(dāng)開關(guān)未 處于打開狀態(tài)時,它才會起作用:
If Not objUser.UserFlags AND ADS_UF_PASSWD_CANT_CHANGE Then
接下來的內(nèi)容可就真的 要讓您傷腦筋了。請看下面這行代碼:
objPasswordNoChangeFlag = objUser.UserFlags XOR ADS_UF_PASSWD_CANT_CHANGE
盡管看起來有點復(fù)雜,實際上這行代碼確實非常簡單。我們此處執(zhí)行的全部操作是切換“用戶不能更改密碼”開關(guān)的值。這正是 XOR 命令的功能。如果開關(guān)處于打開狀態(tài),則 XOR 將其關(guān)閉;如果開關(guān)處于關(guān)閉狀態(tài),則 XOR 將其打開。我們要做的就是獲取 userFlags 屬性的當(dāng)前值,并切換“用戶不能更改密碼”開關(guān)。因為我們已經(jīng)知道該開關(guān)處于關(guān)閉狀態(tài)(還記得我們剛才使用的“If Not”語句嗎?),所以 XOR 命令將該開關(guān)打開。變量 objPasswordNoChangeFlag 中包含的值將與當(dāng)前 userFlags 屬性中的值完全相同,唯一不同之處在于,“用戶不能更改密碼”開關(guān)此時處于打開狀態(tài),而不是處于關(guān)閉狀態(tài)。
跟得上我們的思路嗎?腳本的其余部分就非常簡單了。下面這行代碼將變量 objPasswordNoChangeFlag 的值寫入 userFlags 屬性:
objUser.Put "userFlags", objPasswordNoChangeFlag
然后,我們使用 SetInfo 命令將這些更改寫入用戶帳戶。通過運行這樣一個腳本,使本地用戶 Ken Myer 不再擁有在計算機 atl-ws-01 上更改其密碼的權(quán)限。
那么,如果您想允許 Ken Myer 更改其密碼,該怎么辦呢?那還不簡單。只需檢查“用戶不能更改密碼”開關(guān)是否處于打開 狀態(tài),如果是,則使用 XOR 將其關(guān)閉:
Const ADS_UF_PASSWD_CANT_CHANGE = &H0040 Set objUser = GetObject("WinNT://atl-ws-01/kenmyer") If objUser.UserFlags AND ADS_UF_PASSWD_CANT_CHANGE Then objPasswordNoChangeFlag = objUser.UserFlags XOR ADS_UF_PASSWD_CANT_CHANGE objUser.Put "userFlags", objPasswordNoChangeFlag objUser.SetInfo End If
唯一不同之處在于,我們從 If-Then 語句中刪除了 Not 一詞。這是因為,我們現(xiàn)在想要 查找開關(guān)處于打開狀態(tài)的情況,然后將其關(guān)閉。
我們承認(rèn),這些位掩碼屬性的確 讓人難懂。如果您想了解詳細(xì)信息(以及一些圖片),請參見“Microsoft Windows 2000 腳本編寫指南”中的這一部分。正如前面所承諾的一樣,我們在下面列出了可以使用 userFlags 屬性進行管理的一些其他本地用戶帳戶屬性:
屬性 |
常量 |
值 |
將執(zhí)行登錄腳本 |
ADS_UF_SCRIPT |
&H0001 |
禁用帳戶 |
ADS_UF_ACCOUNTDISABLE |
&H0002 |
帳戶需要主目錄 |
ADS_UF_HOMEDIR_REQUIRED |
&H0008 |
鎖定帳戶 |
ADS_UF_LOCKOUT |
&H0010 |
帳戶不需要密碼 |
ADS_UF_PASSWD_NOTREQD |
&H0020 |
用戶不能更改密碼 |
ADS_UF_PASSWD_CANT_CHANGE |
&H0040 |
允許加密文本密碼 |
ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED |
&H0080 |
帳戶密碼永不過期 |
ADS_UF_DONT_EXPIRE_PASSWD |
&H10000 |
登錄需要使用智能卡 |
ADS_UF_SMARTCARD_REQUIRED |
&H40000 |
密碼已過期 |
ADS_UF_PASSWORD_EXPIRED |
&H800000 |
如果什么時候沒有事情可做,請將這些值替換到“用戶不能更改密碼”腳本中,看會出現(xiàn)什么情況。(當(dāng)然,我們始終建議您,在用這樣的腳本做試驗時,請使用測試計算機,或者至少應(yīng)使用測試帳戶。)
上一篇:可以從一臺遠(yuǎn)程服務(wù)器運行 SP2 安裝程序Install.vbs
欄 目:vb
下一篇:如何通過計劃任務(wù)調(diào)用QuickTest測試腳本
本文標(biāo)題:用vbscript防止本地用戶更改其密碼
本文地址:http://mengdiqiu.com.cn/a1/vb/7873.html
您可能感興趣的文章
- 01-10VBS中的正則表達式的用法大全 <font color=red>原創(chuàng)&
- 01-10VBS中SendKeys的基本應(yīng)用
- 01-10VBScript教程 第十一課深入VBScript
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript語法速查及實例說明
- 01-10VBS中Select CASE的其它用法
- 01-10VBScript教程 第七課使用條件語句
- 01-10vbscript 可以按引用傳遞參數(shù)嗎?
- 01-10VBScript教程 第二課在HTML頁面中添加VBscript代碼
- 01-10VBScript教程 第十四課在VBScript中使用對象


閱讀排行
本欄相關(guān)
- 01-10下載文件到本地運行的vbs
- 01-10飄葉千夫指源代碼,又稱qq刷屏器
- 01-10SendKeys參考文檔
- 01-10什么是一個高效的軟件
- 01-10VBS中的正則表達式的用法大全 &l
- 01-10exe2swf 工具(Adodb.Stream版)
- 01-10VBS中SendKeys的基本應(yīng)用
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript教程 第十一課深入VBScript
- 01-10VBScript語法速查及實例說明
隨機閱讀
- 04-02jquery與jsp,用jquery
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實例總結(jié)
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10使用C語言求解撲克牌的順子及n個骰子