嗨,Scripting Guy!我在登錄腳本中所做的一些設(shè)置要求用戶(hù)是一位本地管理員。腳本能告訴我用戶(hù)是否為本地管理員嗎?
-- GM, Denver, CO
你好,GM.達(dá)到這個(gè)目的的最好方法就是檢查本地管理員組的成員,看看用戶(hù)是否是其中的一員。首先,您需要運(yùn)行腳本的計(jì)算機(jī)的名稱(chēng)。這一步是必需的,以便能夠使用 ADSI 和 WinNT 提供者“綁定”到本地管理員組并取得組成員列表。
然后,您必須確定登錄用戶(hù)的登錄名。知道了此名稱(chēng)之后,可以遍歷 Administrators 組,檢查登錄用戶(hù)是否為其中的成員。
認(rèn)真聽(tīng),不要一臉痛苦的樣子,所有這些只需幾行代碼即可實(shí)現(xiàn):
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
那么,這段腳本做了些什么?好,首先我們創(chuàng)建了 Wscript Network 對(duì)象的一個(gè)實(shí)例;我們可以使用該對(duì)象獲得計(jì)算機(jī)及登錄用戶(hù)的名稱(chēng)。
牢牢掌握了這些名稱(chēng)之后,我們使用 WinNT 提供者綁定到所討論計(jì)算機(jī)上的 Administrators 組。然后,我們進(jìn)入一個(gè) For Each 循環(huán),遍歷所有的組成員(Members 屬性以數(shù)組形式保存,這就是我們?yōu)槭裁葱枰?For Each 循環(huán)的原因)。對(duì)于找到的每一位成員,我們檢查成員的登錄名(objUser.Name)是否等于登錄用戶(hù)的名稱(chēng)(保存在變量 strUser 中)。
以及該成員的名稱(chēng)是否與登錄用戶(hù)的名稱(chēng)相匹配?如果都滿(mǎn)足條件,那么意味著登錄用戶(hù)肯定是一位本地管理員;否則,他(她)不是 Administrators 組的成員。在示例腳本中,我們僅僅顯示了用戶(hù)是否為一名本地管理員;在實(shí)際的登錄腳本中,您可以更進(jìn)一步,執(zhí)行一些要求管理員權(quán)限的任務(wù)。
有關(guān) WinNT 提供者的更多信息,請(qǐng)參閱 MSDN 上的 ADSI SDK 。
聯(lián)系客服