创建用于读取用户的vbscript属于包含嵌套组但无法获取嵌套组列表的组 [英] Creating a vbscript to read user belongs to which group including nested group but unable to get nested group list

查看:105
本文介绍了创建用于读取用户的vbscript属于包含嵌套组但无法获取嵌套组列表的组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用vbscript阅读用户属于哪个组:



 strUsers = inputbox(输入用户名)

'******************************************** ******************************
'*****不要在这个点之外编辑**** *
'******************************************** ******************************


arrUsers = Split(strUsers,, )
设置fs = CreateObject(Scripting.FileSystemObject)
设置outFile = fs.CreateTextFile(.\User Group Membership Report.txt)

outFile。 WriteLine
outFile.WriteLine用户组成员报告
outFile.WriteLine----------------------------
outFile.WriteLine
outFile.WriteLine继续:& Now()
For x = 0 to UBound(arrUsers)
arrUsers(x)= Trim(arrUsers(x))
if x = 0 Then
outFile.WriteLineUsers :& arrUsers(x)
Else
outFile.WriteLine& arrUsers(x)
结束如果
下一个
outFile.WriteLine=========================== =======================================
outFile.WriteLine
对于x = 0到UBound(arrUsers)
调用getGroups(arrUsers(x))
outFile.WriteLine-------------------- ----------------------------------------------
下一个

Wscript.echo完成!


Sub getGroups(strUser)
设置oNetwork = CreateObject(WScript.Network)
strDomain = oNetwork.UserDomain
On Error Resume Next
设置oUser = GetObject(WinNT://& strDomain&/& strUser&,user)
如果Err.Number<> 0然后
outFile.WriteLine strUser& 找不到......
退出Sub
结束如果
Err.Clear
On Error Goto 0

outFile.WriteLine strUser& - & oUser.FullName

For each strGroup in oUser.Groups
outFile.WriteLine& strGroup.Name

Next
Set GroupCollection = oUser.Groups
WScript.EchoUser& StrUserName& 是以下所有群组的成员:
For Each ObjGroup In GroupCollection
outFile.WriteLine>>&修剪(ObjGroup.Name)
' - 现在列出用户是其成员的所有嵌套组
GetNested ObjGroup.Name
下一个
结束Sub
函数GetNested (objGroup)
On Error Resume Next
outFile.WriteLine检查嵌套组>>
设置objSysInfo = CreateObject(ADSystemInfo)
strUser = objSysInfo.UserName
设置objUser = GetObject(LDAP://& strUser)
For objUser中的每个strMember
strPath =LDAP://& strMember
设置objNestedGroup = GetObject(strPath)
strGroupList = strGroupList& [+ objNestedGroup.Name& ]
outFile.WriteLine>>& strGroupList
GetNested(objNestedGroup)
下一个
结束函数





i我正在获取组但不是嵌套组..请帮助。



我尝试了什么:



i尝试过使用LDAP工作,但它无法读取一些组,所以我决定使用winnt //。所以我能够读取组但不能嵌套组

解决方案

< blockquote>最后我得到了解读嵌套组的解决方案。



'On Error Resume Next 

'Set objADSysInfo = CreateObject(ADSystemInfo)

'strUser = objADSysInfo.UserName

'设置objUser = GetObject(LDAP://& strUser)

'对于objUser.memberOf中的每个strGroup

'设置objGroup = GetObject(LDAP://& strGroup)
'Wscript.Echo objGroup
'Wscript。 Echo objGroup.CN
'GetNested objGroup

'Next
dim temp
Set d = CreateObject(Scrip ting.Dictionary)
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_INITTYPE_GC = 3
Const ADS_NAME_TYPE_1779 = 1
Const ADS_NAME_INITTYPE_SERVER = 2
Const ADS_NAME_INITTYPE_DOMAIN = 1
Wscript .Echo=============================================== ====
设置objNetwork = WScript.CreateObject(WScript.Network)
'strUserName = objNetwork.Username
strUserName =laxjoshi
wscript.echo strUserName
strComputerName = objNetwork.ComputerName
strUserDomain = objNetwork.UserDomain
设置objUser = GetObject(WinNT://& strUserDomain& /& strUserName& ,user)
strGroupList =
For each objGroup in objUser.Groups
'wscript.echo objGroup.Name
strGroupName = objGroup.Name
Set objTrans = CreateObject(NameTranslate)
objTrans.Init ADS_NAME_INITTYPE_DOMAIN,strUserDomain
strNTName = strUserDomain& \& strGroupName
objTrans.Set ADS_NAME_TYPE_NT4,strNTName
strGroupDN = objTrans.Get(ADS_NAME_TYPE_1779)
'使用反斜杠
'转义字符转义任何正斜杠字符/。应该转义的所有其他字符是。
strGroupDN =替换(strGroupDN,/,\ /)
'wscript.echostrgroup =& strGroupDN
'strGroupDN =LDAP://& strGroupDN
'wscript.echostrdn =& strGroupDN

设置objGroup = GetObject(LDAP://& strGroupDN)
'Wscript.Echo objGroup
Wscript.Echo objGroup.CN
strgroupname = objGroup .CN
'如果是IsMember(strUserDomain,strUserName,strgroupname)那么
'Wscript.echo用户'& strUserName&'存在于组'& strgroupname&'
'Else
'Wscript.echo用户'& strUserName&'不存在于组' & strgroupname&'
'结束如果

'd.add objGroup.CN
GetNested objGroup




'adsPathNT2DN = strGroupDN
'设置ngrp = GetObject(WinNT://& strUserDomain&/& objGroup.Name&,group)
'对于每个成员在ngrp.Members
'wscript.echo member.name
'If(StrComp(UCase(member.Class),GROUP)= 0)然后
'wscript.echo 群组名称=& member.name
'结束如果
'Next
'wscript.echo========================= =========================
next
wscript.echo=========== =======================================

'如果IsMember(strUserDomain,strUserName,State)然后
'Wscript.echo用户'& strUserName&'存在于组'& State&'
'Else
'Wscript.echo用户'& strUserName&'不存在于组' & State&'
'结束如果
'******************************* ******************************************


'********************************************* ********
'此函数检查给定的AD用户是否是给定组的成员。
函数IsMember(domainName,userName,groupName)
设置groupListD = CreateObject(Scripting.Dictionary)
groupListD.CompareMode = 1
ADSPath = domainName& /& userName
设置objUser = GetObject(WinNT://& ADSPath&,user)
对于objUser.Groups中的每个objGroup
groupListD.Add objGroup.Name, -
下一个
IsMember = CBool​​(groupListD.Exists(groupName))
结束函数
'****************** ************************************************** **********
'*********************************** *******
函数GetNested(objGroup)
On Error Resume Next
colMembers = objGroup.GetEx(memberOf)
For colMembers $ b $中的每个strMember b
strPath =LDAP://& strMember
设置objNestedGroup = GetObject(strPath)
strGroupList = objNestedGroup.CN
if strGroupList<> 和temp<> strGroupList然后
temp = strGroupList
'strGroupList = Replace(strGroupList,CN =,)
strGroupList = trim(strGroupList)
d.add strGroupList
wscript.echo>>>>>& strGroupList
End if

GetNested(objNestedGroup)
Next
End Function


i am using vbscript to read user belongs to which group:

strUsers = inputbox("Enter user name")

'**************************************************************************
'*****                DO NOT EDIT BEYOND THIS POINT                   *****
'**************************************************************************


arrUsers = Split(strUsers, ",")
Set fs = CreateObject ("Scripting.FileSystemObject")
Set outFile = fs.CreateTextFile (".\User Group Membership Report.txt")

outFile.WriteLine
outFile.WriteLine "                       User Group Membership Report"
outFile.WriteLine "                       ----------------------------"
outFile.WriteLine
outFile.WriteLine "Run on: " & Now()
For x = 0 to UBound(arrUsers)
	arrUsers(x) = Trim(arrUsers(x))
	If x = 0 Then
		outFile.WriteLine " Users: " & arrUsers(x)
	Else
		outFile.WriteLine "        " & arrUsers(x)
	End If
Next 
outFile.WriteLine "=================================================================="
outFile.WriteLine
For x = 0 to UBound(arrUsers)
	Call getGroups(arrUsers(x))
	outFile.WriteLine "------------------------------------------------------------------"
Next

Wscript.echo "Done!"


Sub getGroups(strUser)
	Set oNetwork = CreateObject("WScript.Network")
	strDomain = oNetwork.UserDomain
	On Error Resume Next
	Set oUser = GetObject("WinNT://" & strDomain & "/" & strUser & ",user")
	If Err.Number <> 0 Then
		outFile.WriteLine strUser & " not found..."
		Exit Sub
	End If
	Err.Clear
	On Error Goto 0
	
	outFile.WriteLine strUser & " - " & oUser.FullName

	For Each strGroup In oUser.Groups
		outFile.WriteLine "     " & strGroup.Name
            
	Next
Set GroupCollection = oUser.Groups
	WScript.Echo "User " & StrUserName & " is a Member of all the following Groups:"
	For Each ObjGroup In GroupCollection
		outFile.WriteLine "  >> " & Trim(ObjGroup.Name)
		' -- Now List all Nested Groups of which the User is a Member
		GetNested ObjGroup.Name
	Next
End Sub
Function GetNested(objGroup)
    On Error Resume Next
outFile.WriteLine "  checking for nested group>> "
   Set objSysInfo = CreateObject("ADSystemInfo")
   strUser = objSysInfo.UserName
   Set objUser = GetObject("LDAP://" & strUser)
    For Each strMember in objUser
        strPath = "LDAP://" & strMember
        Set objNestedGroup = GetObject(strPath)
        strGroupList = strGroupList & "[" + objNestedGroup.Name & "] "
outFile.WriteLine "  >> " & strGroupList
        GetNested(objNestedGroup)
    Next
End Function



i am getting groups but not nested groups..please help.

What I have tried:

i tried with LDAP its worked,but its unable to read some of groups,so i decided to go with winnt// .so i am able to read groups but not nested groups

解决方案

finally i got solution to read nested group.

'On Error Resume Next

'Set objADSysInfo = CreateObject("ADSystemInfo")

'strUser = objADSysInfo.UserName

'Set objUser = GetObject("LDAP://" & strUser)

'For Each strGroup in objUser.memberOf

'    Set objGroup = GetObject("LDAP://" & strGroup)
 '   Wscript.Echo objGroup
  '  Wscript.Echo objGroup.CN
   ' GetNested objGroup

'Next
dim temp
Set d = CreateObject("Scripting.Dictionary")
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_INITTYPE_GC = 3
  Const ADS_NAME_TYPE_1779 = 1
  Const ADS_NAME_INITTYPE_SERVER = 2
  Const ADS_NAME_INITTYPE_DOMAIN = 1
Wscript.Echo "==================================================="
Set objNetwork = WScript.CreateObject("WScript.Network")
'strUserName =objNetwork.Username
strUserName ="laxjoshi"
wscript.echo strUserName
strComputerName = objNetwork.ComputerName
strUserDomain = objNetwork.UserDomain
Set objUser = GetObject("WinNT://" & strUserDomain & "/" & strUserName & ",user")
strGroupList = ""
For Each objGroup In objUser.Groups
    'wscript.echo objGroup.Name
strGroupName=objGroup.Name
Set objTrans = CreateObject("NameTranslate")
objTrans.Init ADS_NAME_INITTYPE_DOMAIN, strUserDomain
	strNTName = strUserDomain & "\" & strGroupName
       objTrans.Set ADS_NAME_TYPE_NT4, strNTName
        strGroupDN = objTrans.Get(ADS_NAME_TYPE_1779)
  ' Escape any forward slash characters, "/", with the backslash
  ' escape character. All other characters that should be escaped are.
       strGroupDN = Replace(strGroupDN, "/", "\/")
'wscript.echo "strgroup="& strGroupDN 
 ' strGroupDN = "LDAP://" & strGroupDN
'wscript.echo "strdn="& strGroupDN 

Set objGroup = GetObject("LDAP://" & strGroupDN)
    'Wscript.Echo objGroup
    Wscript.Echo objGroup.CN
   strgroupname=objGroup.CN
'If IsMember(strUserDomain,strUserName,strgroupname) Then
 '   Wscript.echo "The user '"& strUserName &"' exists in the group '"&strgroupname&"'"
 'Else
  '  Wscript.echo "The user '"&strUserName&"' not exists in the group '"&strgroupname&"'"
'End If

   'd.add objGroup.CN
    GetNested objGroup




  'adsPathNT2DN = strGroupDN 
 'Set ngrp = GetObject("WinNT://" & strUserDomain & "/" & objGroup.Name & ",group")
'For Each member In ngrp.Members
'wscript.echo member.name
'If (StrComp(UCase(member.Class), "GROUP") = 0) Then
'wscript.echo "Group name="& member.name
'end if
'Next
'wscript.echo "=================================================="
next
wscript.echo "=================================================="

'If IsMember(strUserDomain,strUserName,State) Then
 '   Wscript.echo "The user '"& strUserName &"' exists in the group '"&State&"'"
 'Else
  '  Wscript.echo "The user '"&strUserName&"' not exists in the group '"&State&"'"
'End If
'*************************************************************************

  
' *****************************************************
'This function checks if the given AD user is member of the given group.
Function IsMember(domainName,userName,groupName)
   Set groupListD = CreateObject("Scripting.Dictionary")
   groupListD.CompareMode = 1
   ADSPath = domainName & "/" & userName
   Set objUser = GetObject("WinNT://" & ADSPath & ",user")
   For Each objGroup in objUser.Groups
      groupListD.Add objGroup.Name, "-"
   Next
   IsMember = CBool(groupListD.Exists(groupName))
End Function
'******************************************************************************
'******************************************
Function GetNested(objGroup)
    On Error Resume Next
    colMembers = objGroup.GetEx("memberOf")
    For Each strMember in colMembers

        strPath = "LDAP://" & strMember
        Set objNestedGroup = GetObject(strPath)
        strGroupList =  objNestedGroup.CN
      if  strGroupList <> "" and temp <> strGroupList then
        temp=strGroupList
	'strGroupList = Replace(strGroupList, "CN= ", "")
	strGroupList=trim(strGroupList)
        d.add strGroupList
	wscript.echo ">>>>>"& strGroupList 	
     End If
         
        GetNested(objNestedGroup)
    Next
End Function


这篇关于创建用于读取用户的vbscript属于包含嵌套组但无法获取嵌套组列表的组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆