欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用vbscript防止本地用戶更改其密碼

 更新時(shí)間:2007年04月02日 00:00:00   作者:  
問(wèn):

嗨,Scripting Guy!如何配置本地用戶帳戶以使該用戶無(wú)法更改其密碼?

-- DC

答:

嗨,DC。這其中的秘密就在于神秘的 userFlags 屬性。我們先向您介紹如何設(shè)置用戶帳戶以使用戶無(wú)法更改其密碼,然后介紹可以使用 userFlags 屬性管理的一些其他本地用戶帳戶屬性。運(yùn)氣好的話,還可以趕上吃午餐哩!

我們先來(lái)介紹可以防止用戶更改其密碼的腳本:

復(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

首先,定義一個(gè)常量(它有一個(gè)好記的名稱 ADS_UF_PASSWD_CANT_CHANGE),我們需要用它來(lái)標(biāo)識(shí) userFlags 屬性內(nèi)的正確“開(kāi)關(guān)”。userFlags 屬性是一種位掩碼屬性示例,它包含多個(gè)屬性和屬性值。姑且將位掩碼視為一組開(kāi)關(guān),每個(gè)開(kāi)關(guān)表示一種不同的屬性。如果將“用戶不能更改密碼”開(kāi)關(guān)打開(kāi),則用戶無(wú)法更改其密碼;如果將開(kāi)關(guān)關(guān)閉,則用戶可以 更改其密碼。這部分內(nèi)容還算淺顯易懂;位掩碼唯一不好處理的地方是,“開(kāi)關(guān)”名稱可不像“用戶不能更改密碼”這樣好記,它們使用的是類似于 &H0040 的十六進(jìn)制值。要執(zhí)行這項(xiàng)任務(wù),我們需要切換“&H0040”開(kāi)關(guān),這就是我們定義這一常量的原因。

接下來(lái),連接到計(jì)算機(jī) atl-ws-01 上的 kenmyer 帳戶。此時(shí),我們檢查相關(guān)開(kāi)關(guān)是否已打開(kāi)。在使用位掩碼時(shí),您通常會(huì)看到類似下面的代碼:

If objUser.UserFlags AND ADS_UF_PASSWD_CANT_CHANGE Then

我們可以用淺顯的語(yǔ)言來(lái)說(shuō)明以上代碼:如果存在 userFlags 屬性,并且打開(kāi)了 ADS_UF_PASSWD_CANT_CHANGE 開(kāi)關(guān),則該語(yǔ)句為真,并且應(yīng)執(zhí)行某種操作。就這項(xiàng)任務(wù)而言,我們并不關(guān)心處于打開(kāi)狀態(tài)的開(kāi)關(guān);如果設(shè)置了“不能更改密碼”標(biāo)志,我們的工作即告完成。我們只關(guān)心處于關(guān)閉狀態(tài)的開(kāi)關(guān)。因此,我們編寫(xiě)了下面這行代碼;只有當(dāng)開(kāi)關(guān) 處于打開(kāi)狀態(tài)時(shí),它才會(huì)起作用:

If Not objUser.UserFlags AND ADS_UF_PASSWD_CANT_CHANGE Then

接下來(lái)的內(nèi)容可就真的 要讓您傷腦筋了。請(qǐng)看下面這行代碼:

objPasswordNoChangeFlag = objUser.UserFlags XOR ADS_UF_PASSWD_CANT_CHANGE

盡管看起來(lái)有點(diǎn)復(fù)雜,實(shí)際上這行代碼確實(shí)非常簡(jiǎn)單。我們此處執(zhí)行的全部操作是切換“用戶不能更改密碼”開(kāi)關(guān)的值。這正是 XOR 命令的功能。如果開(kāi)關(guān)處于打開(kāi)狀態(tài),則 XOR 將其關(guān)閉;如果開(kāi)關(guān)處于關(guān)閉狀態(tài),則 XOR 將其打開(kāi)。我們要做的就是獲取 userFlags 屬性的當(dāng)前值,并切換“用戶不能更改密碼”開(kāi)關(guān)。因?yàn)槲覀円呀?jīng)知道該開(kāi)關(guān)處于關(guān)閉狀態(tài)(還記得我們剛才使用的“If Not”語(yǔ)句嗎?),所以 XOR 命令將該開(kāi)關(guān)打開(kāi)。變量 objPasswordNoChangeFlag 中包含的值將與當(dāng)前 userFlags 屬性中的值完全相同,唯一不同之處在于,“用戶不能更改密碼”開(kāi)關(guān)此時(shí)處于打開(kāi)狀態(tài),而不是處于關(guān)閉狀態(tài)。

跟得上我們的思路嗎?腳本的其余部分就非常簡(jiǎn)單了。下面這行代碼將變量 objPasswordNoChangeFlag 的值寫(xiě)入 userFlags 屬性:

objUser.Put "userFlags", objPasswordNoChangeFlag

然后,我們使用 SetInfo 命令將這些更改寫(xiě)入用戶帳戶。通過(guò)運(yùn)行這樣一個(gè)腳本,使本地用戶 Ken Myer 不再擁有在計(jì)算機(jī) atl-ws-01 上更改其密碼的權(quán)限。

那么,如果您想允許 Ken Myer 更改其密碼,該怎么辦呢?那還不簡(jiǎn)單。只需檢查“用戶不能更改密碼”開(kāi)關(guān)是否處于打開(kāi) 狀態(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 語(yǔ)句中刪除了 Not 一詞。這是因?yàn)?,我們現(xiàn)在想要 查找開(kāi)關(guān)處于打開(kāi)狀態(tài)的情況,然后將其關(guān)閉。

我們承認(rèn),這些位掩碼屬性的確 讓人難懂。如果您想了解詳細(xì)信息(以及一些圖片),請(qǐng)參見(jiàn)“Microsoft Windows 2000 腳本編寫(xiě)指南”中的這一部分。正如前面所承諾的一樣,我們?cè)谙旅媪谐隽丝梢允褂?userFlags 屬性進(jìn)行管理的一些其他本地用戶帳戶屬性:

屬性

常量

將執(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

帳戶密碼永不過(guò)期

ADS_UF_DONT_EXPIRE_PASSWD

&H10000

登錄需要使用智能卡

ADS_UF_SMARTCARD_REQUIRED

&H40000

密碼已過(guò)期

ADS_UF_PASSWORD_EXPIRED

&H800000

如果什么時(shí)候沒(méi)有事情可做,請(qǐng)將這些值替換到“用戶不能更改密碼”腳本中,看會(huì)出現(xiàn)什么情況。(當(dāng)然,我們始終建議您,在用這樣的腳本做試驗(yàn)時(shí),請(qǐng)使用測(cè)試計(jì)算機(jī),或者至少應(yīng)使用測(cè)試帳戶。)

相關(guān)文章

最新評(píng)論