溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vbscript中怎么防止本地用戶更改密碼

發(fā)布時間:2021-07-21 11:32:56 來源:億速云 閱讀:143 作者:Leah 欄目:開發(fā)技術

vbscript中怎么防止本地用戶更改密碼,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

防止用戶更改其密碼的腳本:

復制代碼 代碼如下:


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),我們需要用它來標識 userFlags 屬性內的正確“開關”。userFlags 屬性是一種位掩碼屬性示例,它包含多個屬性和屬性值。姑且將位掩碼視為一組開關,每個開關表示一種不同的屬性。如果將“用戶不能更改密碼”開關打開,則用戶無法更改其密碼;如果將開關關閉,則用戶可以 更改其密碼。這部分內容還算淺顯易懂;位掩碼唯一不好處理的地方是,“開關”名稱可不像“用戶不能更改密碼”這樣好記,它們使用的是類似于 &H0040 的十六進制值。要執(zhí)行這項任務,我們需要切換“&H0040”開關,這就是我們定義這一常量的原因。

接下來,連接到計算機 atl-ws-01 上的 kenmyer 帳戶。此時,我們檢查相關開關是否已打開。在使用位掩碼時,您通常會看到類似下面的代碼:

If objUser.UserFlags AND ADS_UF_PASSWD_CANT_CHANGE Then

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

If Not objUser.UserFlags AND ADS_UF_PASSWD_CANT_CHANGE Then

接下來的內容可就真的 要讓您傷腦筋了。請看下面這行代碼:

objPasswordNoChangeFlag = objUser.UserFlags XOR ADS_UF_PASSWD_CANT_CHANGE

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

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

objUser.Put "userFlags", objPasswordNoChangeFlag

然后,我們使用 SetInfo 命令將這些更改寫入用戶帳戶。通過運行這樣一個腳本,使本地用戶 Ken Myer 不再擁有在計算機 atl-ws-01 上更改其密碼的權限。

那么,如果您想允許 Ken Myer 更改其密碼,該怎么辦呢?那還不簡單。只需檢查“用戶不能更改密碼”開關是否處于打開 狀態(tài),如果是,則使用 XOR 將其關閉:

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 一詞。這是因為,我們現在想要 查找開關處于打開狀態(tài)的情況,然后將其關閉。

我們承認,這些位掩碼屬性的確 讓人難懂。如果您想了解詳細信息(以及一些圖片),請參見“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

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI