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 的十六进制值。要执行这项任务,我们需要切换“&H0040”开关,这就是我们定义这一常量的原因。
接下来,连接到计算机 atl-ws-01 上的 kenmyer 帐户。此时,我们检查相关开关是否已打开。在使用位掩码时,您通常会看到类似下面的代码:
If objUser.UserFlags AND ADS_UF_PASSWD_CANT_CHANGE Then
我们可以用浅显的语言来说明以上代码:如果存在 userFlags 属性,并且打开了 ADS_UF_PASSWD_CANT_CHANGE 开关,则该语句为真,并且应执行某种操作。就这项任务而言,我们并不关心处于打开状态的开关;如果设置了“不能更改密码”标志,我们的工作即告完成。我们只关心处于关闭状态的开关。因此,我们编写了下面这行代码;只有当开关未 处于打开状态时,它才会起作用:
If Not objUser.UserFlags AND ADS_UF_PASSWD_CANT_CHANGE Then
接下来的内容可就真的 要让您伤脑筋了。请看下面这行代码:
objPasswordNoChangeFlag = objUser.UserFlags XOR ADS_UF_PASSWD_CANT_CHANGE
尽管看起来有点复杂,实际上这行代码确实非常简单。我们此处执行的全部操作是切换“用户不能更改密码”开关的值。这正是 XOR 命令的功能。如果开关处于打开状态,则 XOR 将其关闭;如果开关处于关闭状态,则 XOR 将其打开。我们要做的就是获取 userFlags 属性的当前值,并切换“用户不能更改密码”开关。因为我们已经知道该开关处于关闭状态(还记得我们刚才使用的“If Not”语句吗?),所以 XOR 命令将该开关打开。变量 objPasswordNoChangeFlag 中包含的值将与当前 userFlags 属性中的值完全相同,唯一不同之处在于,“用户不能更改密码”开关此时处于打开状态,而不是处于关闭状态。
跟得上我们的思路吗?脚本的其余部分就非常简单了。下面这行代码将变量 objPasswordNoChangeFlag 的值写入 userFlags 属性:
objUser.Put "userFlags", objPasswordNoChangeFlag
然后,我们使用 SetInfo 命令将这些更改写入用户帐户。通过运行这样一个脚本,使本地用户 Ken Myer 不再拥有在计算机 atl-ws-01 上更改其密码的权限。
那么,如果您想允许 Ken Myer 更改其密码,该怎么办呢?那还不简单。只需检查“用户不能更改密码”开关是否处于打开 状态,如果是,则使用 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 一词。这是因为,我们现在想要 查找开关处于打开状态的情况,然后将其关闭。
我们承认,这些位掩码属性的确 让人难懂。如果您想了解详细信息(以及一些图片),请参见“Microsoft Windows 2000 脚本编写指南”中的这一部分。正如前面所承诺的一样,我们在下面列出了可以使用 userFlags 属性进行管理的一些其他本地用户帐户属性:
属性 | 常量 | 值 |
将执行登录脚本 | 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 |
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。