如何确定用户是否为本地管理员?

来源:百度文库 编辑:神马文学网 时间:2024/04/29 14:31:09

如何确定用户是否为本地管理员?

问:

嗨,Scripting Guy!我在登录脚本中所做的一些设置要求用户是一位本地管理员。脚本能告诉我用户是否为本地管理员吗?

-- GM, Denver, CO

答:

你好,GM.达到这个目的的最好方法就是检查本地管理员组的成员,看看用户是否是其中的一员。首先,您需要运行脚本的计算机的名称。这一步是必需的,以便能够使用 ADSI 和 WinNT 提供者“绑定”到本地管理员组并取得组成员列表。

然后,您必须确定登录用户的登录名。知道了此名称之后,可以遍历 Administrators 组,检查登录用户是否为其中的成员。

认真听,不要一脸痛苦的样子,所有这些只需几行代码即可实现:

Set objNetwork = CreateObject("Wscript.Network")strComputer = objNetwork.ComputerNamestrUser = objNetwork.UserNameSet objGroup = GetObject("WinNT://" & strComputer & "/Administrators")For Each objUser in objGroup.MembersIf objUser.Name = strUser ThenWscript.Echo strUser & " is a local administrator."End IfNext

那么,这段脚本做了些什么?好,首先我们创建了 Wscript Network 对象的一个实例;我们可以使用该对象获得计算机及登录用户的名称。

牢牢掌握了这些名称之后,我们使用 WinNT 提供者绑定到所讨论计算机上的 Administrators 组。然后,我们进入一个 For Each 循环,遍历所有的组成员(Members 属性以数组形式保存,这就是我们为什么需要 For Each 循环的原因)。对于找到的每一位成员,我们检查成员的登录名(objUser.Name)是否等于登录用户的名称(保存在变量 strUser 中)。

以及该成员的名称是否与登录用户的名称相匹配?如果都满足条件,那么意味着登录用户肯定是一位本地管理员;否则,他(她)不是 Administrators 组的成员。在示例脚本中,我们仅仅显示了用户是否为一名本地管理员;在实际的登录脚本中,您可以更进一步,执行一些要求管理员权限的任务。

有关 WinNT 提供者的更多信息,请参阅 MSDN 上的 ADSI SDK 。