2011-10-14 57 views
3

我需要编写一个脚本来获取Windows服务器的Administrators组中的成员列表以供审核。如果不是本地的,我还需要显示用户/组的域名。如何使用VBScript和WMI列出本地管理员组的所有成员

+0

很抱歉的悬而未决的问题,我以为我可以关闭它,所以它只是一个代码共享,但我不能再过8个小时。 –

+0

你可以做的是问一个问题:“我如何列出所有成员...”,然后将其作为答案。 – 2011-10-15 13:09:25

+1

我将问题的答案部分编辑为答案。 SO自我回答时请使用此方法。您然后不需要关闭它。 –

回答

4

下面的脚本将工作,即使在域控制器上:

Sub GetAdministrators(strComputerName) 
    Dim objWMIService, strQuery, colItems, Path, strMembers 
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 
    strQuery = "select * from Win32_GroupUser where GroupComponent = " & chr(34) & "Win32_Group.Domain='" & strComputerName & "',Name='Administrators'" & Chr(34) 
    Set ColItems = objWMIService.ExecQuery(strQuery) 
    strMembers = "" 
    For Each Path In ColItems 
     Dim strMemberName, NamesArray, strDomainName, DomainNameArray 
     NamesArray = Split(Path.PartComponent,",") 
     strMemberName = Replace(Replace(NamesArray(1),Chr(34),""),"Name=","") 
     DomainNameArray = Split(NamesArray(0),"=") 
     strDomainName = Replace(DomainNameArray(1),Chr(34),"") 
     If strDomainName <> strComputerName Then 
      strMemberName = strDomainName & "\" & strMemberName 
     End If 
     WScript.Echo strMemberName 
    Next 
End Sub 

Function GetComputerName() 
    Set objWMISvc = GetObject("winmgmts:\\.\root\cimv2") 
    Set colItems = objWMISvc.ExecQuery("Select * from Win32_ComputerSystem", , 48) 
    For Each objItem in colItems 
     strComputerName = objItem.Name 
     GetComputerName = strComputerName 
    Next 
End Function 

GetAdministrators GetComputerName 

要执行它,只需运行该命令提示符窗口:

cscript //nologo script.vbs. 
相关问题