#213693 - 2019-06-11 11:09 PM
How to Validate Subgroup?
|
QCarvalho
Just in Town
Registered: 2019-06-11
Posts: 4
Loc: Brazil
|
Hi Guys, I'm new here. I would like to know, how to validate if a user has a certain nested group. Has anyone ever been in this situation?
|
Top
|
|
|
|
#213697 - 2019-06-12 03:31 AM
Re: How to Validate Subgroup?
[Re: Glenn Barnas]
|
QCarvalho
Just in Town
Registered: 2019-06-11
Posts: 4
Loc: Brazil
|
Thank You Glenn, I Try use this code, but i'm don't know how make a validation. =( exemple: I need validate if the User Quintela have a subgroup TEST. my incomplete code is:
;SERVERS
$server1="\\BRSP03001A"
$server2="\\BRSP03017A"
Break ON
$objSysInfo = CreateObject("ADSystemInfo")
"User is a member of the following: "+@CRLF
For Each $sGroup in GetGroups("LDAP://"+$objSysInfo.username,">")
$sGroup+@CRLF
Next
@CRLF
@CRLF
@CRLF
IF "GG_BRSP03017A_EMPRESA_MAP_DRIVE" IN $sGroup
USE J: $server2+"\empresas$"
ENDIF
Function GetGroups($vStart,Optional $sIndent)
Dim $sGroupList, $sGroup
If Not (9 = VarType($vStart)) $vStart=GetObject($vStart) EndIf
If Not (9 = VarType($vStart)) Exit 87 EndIf
$sGroupList=$vStart.GetEx("memberOf")
If @ERROR Exit 0 EndIf
For Each $sGroup in $sGroupList
If Not(ASCan($GetGroups,$sGroup)+1) OR $sIndent
$GetGroups=Split(Join($GetGroups,Chr(10))+Chr(10)+SubStr($sIndent,2)+$sGroup,Chr(10))
EndIf
For Each $sChain in GetGroups("LDAP://"+$sGroup,$sIndent+Left($sIndent,1))
If Not(ASCan($GetGroups,$sChain)+1) OR $sIndent
$GetGroups=Split(Join($GetGroups,Chr(10))+Chr(10)+$sChain,Chr(10))
EndIf
Next
Next
$GetGroups=Split(SubStr(Join($GetGroups,Chr(10)),2),Chr(10))
EndFunction
Function SplitNE($String, Optional $SplitChar)
Dim $Array[0],$NumMembers,$NewMember,$MemberFound,$LenStr,$i,$ChkChr
$String = "" + $String
$SplitChar = "" + $SplitChar
If $SplitChar = ""
$SplitChar = " "
EndIf
$LenStr = Len($String)
$NumMembers = 0
$NewMember = ""
$MemberFound = 0
For $i = 1 To $LenStr
$ChkChr = SubStr($String,$i,1)
If InStr($SplitChar,$ChkChr)
If $NewMember ; If member contains text, add to array
ReDim Preserve $Array[$NumMembers]
$Array[$NumMembers] = $NewMember
$NewMember = ""
$NumMembers = $NumMembers + 1
$MemberFound = 1
EndIf
Else
$NewMember = $NewMember + $ChkChr
EndIf
Next
If $NewMember ; If only one (last) member
ReDim Preserve $Array[$NumMembers]
$Array[$NumMembers] = $NewMember
$MemberFound = 1
EndIf
If $MemberFound
$SplitNE = $Array
Else
$SplitNE = 0 ; No members found
EndIf
EndFunction
Function StrReverse($strInput)
Dim $sc
$sc = CreateObject("ScriptControl")
$sc.Language = "VBScript"
$StrReverse=$sc.Eval('StrReverse("'+$strInput+'")')
EndFunction
The error: ERROR : unexpected command! Script: C:\Windows\SYSVOL\sysvol\cmnet.cloud\scripts\testegrupo.src Line : 18
it's just validation error: IF "GG_BRSP03017A_EMPRESA_MAP_DRIVE" IN $sGroup USE J: $server2+"\empresas$" ENDIF
Edited by Mart (2019-06-12 09:18 AM) Edit Reason: Please use code tags when posting code.
|
Top
|
|
|
|
#213700 - 2019-06-12 01:15 PM
Re: How to Validate Subgroup?
[Re: Mart]
|
QCarvalho
Just in Town
Registered: 2019-06-11
Posts: 4
Loc: Brazil
|
Break ON
$objSysInfo = CreateObject("ADSystemInfo")
? "User is a member of the following: " For Each $sGroup in GetGroups("LDAP://"+$objSysInfo.username,">") ? $sGroup Next
@CRLF @CRLF @CRLF @CRLF
$group = "GG_BRSP03017A_EMPRESA_MAP_DRIVE"
If InGroup($group) ? "member" ;Map drive Else ? "not a member" ;Do not map drive EndIf
@CRLF @CRLF @CRLF @CRLF
;"Computer is a member of the following: "+@CRLF ;For Each $sGroup in GetGroups("LDAP://"+$objSysInfo.computername,">") ; $sGroup+@CRLF ;Next
Function GetGroups($vStart,Optional $sIndent) Dim $sGroupList, $sGroup If Not (9 = VarType($vStart)) $vStart=GetObject($vStart) EndIf If Not (9 = VarType($vStart)) Exit 87 EndIf
$sGroupList=$vStart.GetEx("memberOf") If @ERROR Exit 0 EndIf For Each $sGroup in $sGroupList If Not(ASCan($GetGroups,$sGroup)+1) OR $sIndent $GetGroups=Split(Join($GetGroups,Chr(10))+Chr(10)+SubStr($sIndent,2)+$sGroup,Chr(10)) EndIf For Each $sChain in GetGroups("LDAP://"+$sGroup,$sIndent+Left($sIndent,1)) If Not(ASCan($GetGroups,$sChain)+1) OR $sIndent $GetGroups=Split(Join($GetGroups,Chr(10))+Chr(10)+$sChain,Chr(10)) EndIf Next Next $GetGroups=Split(SubStr(Join($GetGroups,Chr(10)),2),Chr(10)) EndFunction
; Sub-Function for returning nested groups Function GetNested($objGroup) Dim $_colMembers, $_strMember, $_strPath, $_objNestedGroup, $_ERR ; init the return value to a null string $GetNested = '' ; get the collection $_colMembers = $objGroup.GetEx("memberOf") ; enumerate the collection For Each $_strMember in $_colMembers $_strPath = "LDAP://" + $_strMember $_objNestedGroup = GetObject($_strPath) $GetNested = $_objNestedGroup.CN Next Exit 0 EndFunction
If I use this code, doesn't work, InGroup don't see nested groups.
C:\Windows\SYSVOL\sysvol\cmnet.cloud\scripts>kix32 grouptest.src
User is a member of the following: CN=MAPFAITEC,OU=Faitec,OU=USUARIOS,OU=ACCOR,DC=cmnet,DC=cloud >CN=GG_BRSP03017A_EMPRESAS_08BELASARTES_MODIFY,OU=008-HB289-BELAS ARTES,OU=EMPRESAS,OU=BRSP03017A,OU=GRUPOS,OU=ACCOR,DC=cmnet,DC=cloud >>CN=GG_BRSP03017A_EMPRESAS_08BELASARTES_READ,OU=008-HB289-BELAS ARTES,OU=EMPRESAS,OU=BRSP03017A,OU=GRUPOS,OU=ACCOR,DC=cmnet,DC=cloud >>>CN=DL_BRSP03017A_EMPRESAS_08BELASARTES_READ,OU=008-HB289-BELAS ARTES,OU=EMPRESAS,OU=BRSP03017A,OU=GRUPOS,OU=ACCOR,DC=cmnet,DC=cloud >>>CN=GG_BRSP03017A_EMPRESA_MAP_DRIVE,OU=EMPRESAS,OU=BRSP03017A,OU=GRUPOS,OU=ACCOR,DC=cmnet,DC=cloud >>>>CN=Citrix Fileshare ArquivosCMNet,OU=CITRIX,OU=GRUPOS,OU=ACCOR,DC=cmnet,DC=cloud >>>>CN=DL_BRSP03017A_EMPRESA_LIST,OU=EMPRESAS,OU=BRSP03017A,OU=GRUPOS,OU=ACCOR,DC=cmnet,DC=cloud >>CN=DL_BRSP03017A_EMPRESAS_08BELASARTES_MODIFY,OU=008-HB289-BELAS ARTES,OU=EMPRESAS,OU=BRSP03017A,OU=GRUPOS,OU=ACCOR,DC=cmnet,DC=cloud CN=Domain Admins,CN=Users,DC=cmnet,DC=cloud >CN=SophosAdministrator,CN=Users,DC=cmnet,DC=cloud >CN=Denied RODC Password Replication Group,CN=Users,DC=cmnet,DC=cloud >CN=Administrators,CN=Builtin,DC=cmnet,DC=cloud
not a member
|
Top
|
|
|
|
#213702 - 2019-06-12 08:02 PM
Re: How to Validate Subgroup?
[Re: Mart]
|
QCarvalho
Just in Town
Registered: 2019-06-11
Posts: 4
Loc: Brazil
|
Hi Mart, I'm using KiXtart 2010 4.67 / Copyright Ruud van Velsen 2016
Finally I Win! kkkkkkk
I made the validation in the loop structure
CLS
Break ON
$objSysInfo = CreateObject("ADSystemInfo")
$groupemp = "GG_BRSP03017A_EMPRESA_MAP_DRIVE"
$groupfisc = "GG_BRSP03017A_PORTALFISCAL_MAP_DRIVE"
For Each $sGroup in GetGroups("LDAP://"+$objSysInfo.username)
IF substr($sGroup,4,IofSubStr($sGroup, ',OU=' , 1)-4) = $groupemp
? "MAP DRIVE EMP"
EndIf
IF substr($sGroup,4,IofSubStr($sGroup, ',OU=' , 1)-4) = $groupfisc
? "MAP DRIVE FISCAL"
EndIf
Next
Function GetGroups($vStart,Optional $sIndent)
Dim $sGroupList, $sGroup
If Not (9 = VarType($vStart)) $vStart=GetObject($vStart) EndIf
If Not (9 = VarType($vStart)) Exit 87 EndIf
$sGroupList=$vStart.GetEx("memberOf")
If @ERROR Exit 0 EndIf
For Each $sGroup in $sGroupList
If Not(ASCan($GetGroups,$sGroup)+1) OR $sIndent
$GetGroups=Split(Join($GetGroups,Chr(10))+Chr(10)+SubStr($sIndent,2)+$sGroup,Chr(10))
EndIf
For Each $sChain in GetGroups("LDAP://"+$sGroup,$sIndent+Left($sIndent,1))
If Not(ASCan($GetGroups,$sChain)+1) OR $sIndent
$GetGroups=Split(Join($GetGroups,Chr(10))+Chr(10)+$sChain,Chr(10))
EndIf
Next
Next
$GetGroups=Split(SubStr(Join($GetGroups,Chr(10)),2),Chr(10))
EndFunction
function IofSubStr($Str,$Find,$Start)
dim $
$=split(substr($Str,$Start),$Find)
$IofSubStr=iif(0=ubound($),0,len($[0])+$Start)
endfunction
Thanks Glen and Mart!!!
|
Top
|
|
|
|
Moderator: Jochen, Allen, Radimus, Glenn Barnas, ShaneEP, Ruud van Velsen, Arend_, Mart
|
0 registered
and 557 anonymous users online.
|
|
|