Page 1 of 1 1
Topic Options
#210338 - 2015-06-08 04:41 PM GroupMembers UDF group members from other domains
Mart Moderator Offline
KiX Supporter
*****

Registered: 2002-03-27
Posts: 4673
Loc: The Netherlands
Hi guys,

I have a small issue with the Groupmembers UDF. I'm trying to get a list of all users in a specific AD group. This works fine when there are only users in the group that are in the same domain as me. As soon as I take a group that has users from for example our parent domain I get an empty (-1) array. Is this a bug or am I missing something? The group is in our domain and I'm one of the domain admins for our domain.


 Code:
$users = groupmembers(@LDOMAIN, "Some goup" ,1)

For Each $user in $users
	? $user
	Sleep 0.2
Next

;Function Groupmembers()
;NAME        GroupMembers
;
;ACTION      Returns an array of all group members of the specified group
;
;SYNTAX      GroupMembers(Target, Group, [FLAG])
;
;PARAMETERS  Target
;               The Domain name or Workstation to work with.  For faster workstation 
;               execution, include the Domain Name that the workstation is a meber of.
;
;               "Kixtart/beanbag" would be working with the workstation Beanbag in the 
;               Kixtart domain
;
;            Group
;               The Group you want to query
;
;            [FLAGS]
;               To use the flags options add the numbers of the desired flags toghthers and
;               Use that number in the flag field.
;
;                  Filter :(only one filter flag at a time please)
;                     1 = all
;                     2 = Users only
;                     4 = Groups only
;
;                  ADSI Information(return ADSI information "pick only one")
;                     8  = ADSPath field
;                     16 = ADSI Object Handle
;
;RETURNS     an array containing , if the ADSPath option is used the ADSPath 
;            will also be returned |.
;
;REMARKS     ADSI com object must be installed.
;
;EXAMPLES    ;this return all members of the Domain Admins group in the kixtart domain.
;            $members = groupmembers("kixtart","Domain admins")
;
;            ;this will will return all groups in the local administrators group on 
;            ;the Workstation beanbad in the kixtart domain.  Also the 
;            $groups = groupmembers("kixtart/beanbag","Administratoos","group")
Function Groupmembers($target, $group, optional $flag)
	Dim $temparray[8], $member, $i, $chunk, $flag, $ADSIFlag, $filterFlag
	$chunk = UBound($temparray)
	$flag = Val($flag)
	$i = 0
	$group = GetObject("WinNT://" + $target + "/" + $group)
		
	If VarType($group) <> 9
		Exit(@error)
	EndIf
	Select
		Case $flag & 1
			$filterflag = 1
		Case $flag & 2
			$filterflag = 2
		Case $flag & 4
			$filterflag = 4
		Case 1
			$filterflag = 1
	EndSelect
	Select
		Case $flag & 8
			$ADSIFlag = 8
		Case $flag & 16
			$ADSIFlag = 16
	EndSelect
	For Each $member in $group.members
		Select
			Case $filterflag = 2 And $member.class = "user"
				If SubStr($member.name, Len($member.name), 1) <> "$"
					$temparray[$i] = $member.name
					Select
						Case $adsiflag = 8
							$temparray[$i] = $member.adspath
						Case $adsiflag = 16
							$temparray[$i] = $member
					EndSelect
					$i = $i + 1
				EndIf
			Case $filterflag = 4 And $member.class = "Group"
				If SubStr($member.name, Len($member.name), 1) <> "$"
					$temparray[$i] = $member.name
					Select
						Case $adsiflag = 8
							$temparray[$i] = $member.adspath
						Case $adsiflag = 16
							$temparray[$i] = $member
					EndSelect
					$i = $i + 1
				EndIf
			Case $filterflag = 1
				If SubStr($member.name, Len($member.name), 1) <> "$"
					$temparray[$i] = $member.name
					Select
						Case $adsiflag = 8
							$temparray[$i] = $member.adspath
						Case $adsiflag = 16
							$temparray[$i] = $member
					EndSelect
					$i = $i + 1
				EndIf
			Case $filterflag
				;bit bucket
		EndSelect
		If $i = UBound($temparray)
			ReDim preserve $temparray[UBound($temparray) + $chunk]
		EndIf
	Next
	If $i <> 0
		ReDim preserve $temparray[$i - 1]
		$groupmembers = $temparray
	EndIf
EndFunction



Edited by Mart (2015-06-08 04:41 PM)
_________________________
Mart

- Chuck Norris once sold ebay to ebay on ebay.

Top
#210339 - 2015-06-08 05:02 PM Re: GroupMembers UDF group members from other domains [Re: Mart]
Allen Administrator Online   shocked
KiX Supporter
*****

Registered: 2003-04-19
Posts: 4562
Loc: USA
This is based on the WinNT object...

GetObject("WinNT://" + $target + "/" + $group)

I haven't looked, but I would think there would be one based on LDAP somewhere. Might get better results.

Top
#210341 - 2015-06-09 09:07 AM Re: GroupMembers UDF group members from other domains [Re: Allen]
Arend_ Moderator Offline
MM club member
*****

Registered: 2005-01-17
Posts: 1896
Loc: Hilversum, The Netherlands
As Allen said, LDAP is much more reliable, here is a sample of my code:
 Code:
Dim $strGroup, $objGroup, $objUser
$strGroup = "LDAP://CN=MyGroup,OU=MySecurityGroups,DC=MyDomain,DC=local"
$objGroup = GetObject($strGroup)

For Each $objUser in $objGroup.Members
  ? $objUser.CN
Next

Top
#210342 - 2015-06-09 09:20 AM Re: GroupMembers UDF group members from other domains [Re: Arend_]
Mart Moderator Offline
KiX Supporter
*****

Registered: 2002-03-27
Posts: 4673
Loc: The Netherlands
Thanks guys. Using LDAP works just fine.
_________________________
Mart

- Chuck Norris once sold ebay to ebay on ebay.

Top
Page 1 of 1 1


Moderator:  Jochen, Allen, Radimus, Glenn Barnas, ShaneEP, Ruud van Velsen, Arend_, Mart 
Hop to:
Shout Box

Who's Online
1 registered (Allen) and 1172 anonymous users online.
Newest Members
StuTheCoder, M_Moore, BeeEm, min_seow, Audio
17884 Registered Users

Generated in 0.059 seconds in which 0.03 seconds were spent on a total of 13 queries. Zlib compression enabled.

Search the board with:
superb Board Search
or try with google:
Google
Web kixtart.org