Beiträge von GerhardSchr
-
-
hi water und alles klar?

AD udf funktioniert so weit sehr gut, eine Frage habe ich aber doch

kann es sein, dass die _AD_RecursiveGetGroupMembers funktion (immernoch) neben den namen die enthaltenen Gruppen selbst ausgibt?
z.B.:
Gruppe: Vorstand (Peter, Hannes)
Gruppe: Arbeiter (Heike, Johannes)Gruppe in Gruppe: Alle_zusammen (Vorstand, Arbeiter)
Ergebnis von _AD_RecursiveGetGroupMembers ("Alle_zusammen", 10, 0, 0)
Vorstand (sollte nicht enthalten sein)
Arbeiter (sollte nicht enthalten sein)
Peter (ist ok)
Hannes (ist ok)
Heike (ist ok)
Johannes (ist ok)oder benutzte ich (wieder mal) eine alter Version?

Danke schonmal!
-
-
tlotuade meint bestimmt sowas: http://stackoverflow.com/questions/2905…programatically
ich nutze es auch so...entweder einen bat generieren oder direkt mittels autoit ausführen....
-
ohne zu wissen, ob die udf das kann --> Outlook udf
-
oder in hundert jahren lesen wir wieder nurnoch steintafeln...
-
kenne mich zwar nicht damit aus, aber du hast erwähnt, dass der ton ausgeschaltet wird...das könnte man ja abfragen....
-
hau alle *.exe weg und komprimiere mal mit 7z auf der höchsten stufe

dann könnte man es bestimmt als foren upload speichern/archivieren

am längsten hält warscheinlich: Ausdrucken

-
super, lade ich dann mal die neue version

jetzt fehlt nurnoch (meinerseits):
- _AD_RecursiveGetGroupMembers ohne die Gruppen im Array- _AD_IsMemberOf rekusive PrüfungWenn du Zeit hast!
Danke!
:):):):):):):):):):):):):):)
-
Hallo Water!
sieht gut aus!
Bei mir hat sie funktioniert
Danke für deine Zeit!
Willst du die dann mit in die AD.au3 packen und ersetzt dann die "normale" _Ad_IsMemberOf?
Alte Script sollten ja noch laufen, da die beiden letzten Optionen optional sind...Wiedermal super arbeit!
Gruß
GerhardSchr -
Ich glaube wenn man nslookup auf den full dns macht, sollte der erste in der liste der sein, der auch später im %logonserver% steht.
Allerdings bin ich mir nicht sicher, was passiert, wenn sich ein user eines anderen Standortes anmeldet, dann greifen ja Benutzerrichtlinien, ohne Anmeldung greifen bestimmt die Computerrichtlinien...
Je nachdem wie und wo was eingestellt wurde.
Ich denke mal, dass es da aber auch eine automatische Logik gibt....heißt glaube ich irgendwas mit Kosten und Wegstrecke...
Gruß
GerhardSchr -
super, lade ich dann mal die neue version

jetzt fehlt nurnoch (meinerseits):
- _AD_RecursiveGetGroupMembers ohne die Gruppen im Array
- _AD_IsMemberOf rekusive PrüfungWenn du Zeit hast!
Danke!
-
damit geht es auch.
Wieder ein "Fehler" weniger

-
Danke!
[autoit]$sObject = _AD_FixSpecialChars($sObject, 1) ; the object needs to be unescaped for the LDAP query but the result might be escaped
[/autoit]
habe ich auskommentiert....nach
[autoit]If StringMid($sObject, 3, 1) <> "=" Then $sObject = _AD_SamAccountNameToFQDN($sObject) ; sAMAccountName provided
[/autoit]
[autoit]
habe ich$sObject = StringReplace($sObject, "\/", "/")
[/autoit]eingefügt. (Es war $sObject anstatt $sAD_Object
)so sieht es jetzt aus:
[autoit]; #FUNCTION# ====================================================================================================================
[/autoit][autoit][/autoit][autoit]
; Name...........: _AD_RecursiveGetMemberOf
; Description ...: Takes a group, user or computer and recursively returns a list of groups the object is a member of.
; Syntax.........: _AD_RecursiveGetMemberOf($sObject[, $iDepth = 10[, $bListInherited = True[, $bFQDN = True]]])
; Parameters ....: $sObject - User, group or computer for which the group membership is to be returned. Can be specified as Fully Qualified Domain Name (FQDN) or sAMAccountName
; $iDepth - Optional: Maximum depth of recursion (default = 10)
; $bListInherited - Optional: Defines if the function returns the group(s) it was inherited from (default = True)
; $bFQDN - Optional: Specifies the attribute to be returned. True = distinguishedName (FQDN), False = SamAccountName (default = True)
; Return values .: Success - Returns an one-based one dimensional array of group names (FQDN or sAMAccountName) the user or group is a member of
; Failure - "", sets @error to:
; |1 - Specified user, group or computer does not exist
; Author ........: Jonathan Clelland
; Modified.......: water
; Remarks .......: This function traverses the groups that the object is immediately a member of while also checking its group membership.
; For groups that are inherited, the return is the FQDN or sAMAccountname of the group, user or computer, and the FQDN(s) or sAMAccountname(s) of the group(s) it
; was inherited from, seperated by '|'(s) if flag $bListInherited is set to True.
;+
; If flag $bListInherited is set to False then the group names are sorted and only unique groups are returned.
; Related .......: _AD_IsMemberOf, _AD_GetUserGroups, _AD_GetUserPrimaryGroup
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func _AD_RecursiveGetMemberOf($sObject, $iDepth = 10, $bListInherited = True, $bFQDN = True)If _AD_ObjectExists($sObject) = 0 Then Return SetError(1, 0, "")
[/autoit][autoit][/autoit][autoit]
If StringMid($sObject, 3, 1) <> "=" Then $sObject = _AD_SamAccountNameToFQDN($sObject) ; sAMAccountName provided
$sObject = StringReplace($sObject, "\/", "/");$sObject = _AD_FixSpecialChars($sObject, 1) ; the object needs to be unescaped for the LDAP query but the result might be escaped
[/autoit][autoit][/autoit][autoit]Local $iCount1, $iCount2
[/autoit][autoit][/autoit][autoit]
Local $sField = "distinguishedName"
If Not $bFQDN Then $sField = "samaccountname"
$__oAD_Command.CommandText = "<LDAP://" & $sAD_HostServer & "/" & $sAD_DNSDomain & ">;(member=" & $sObject & ");" & $sField & ";subtree"
Local $oRecordSet = $__oAD_Command.Execute
Local $aGroups[$oRecordSet.RecordCount + 1] = [0]
If $oRecordSet.RecordCount = 0 Then Return $aGroups
$oRecordSet.MoveFirst
$iCount1 = 1
Local $aTempMemberOf[1]
Do
$aGroups[$iCount1] = $oRecordSet.Fields(0).Value
If $iDepth > 0 Then
$aTempMemberOf = _AD_RecursiveGetMemberOf($aGroups[$iCount1], $iDepth - 1, $bListInherited, $bFQDN)
If $bListInherited Then
For $iCount2 = 1 To $aTempMemberOf[0]
$aTempMemberOf[$iCount2] &= "|" & $aGroups[$iCount1]
Next
EndIf
_ArrayDelete($aTempMemberOf, 0)
_ArrayConcatenate($aGroups, $aTempMemberOf)
EndIf
$iCount1 += 1
$oRecordSet.MoveNext
Until $oRecordSet.EOF
$oRecordSet.Close
If $bListInherited = False Then
_ArraySort($aGroups, 0, 1)
$aGroups = _ArrayUnique($aGroups, 1, 1)
EndIf
$aGroups[0] = UBound($aGroups) - 1
Return $aGroupsEndFunc ;==>_AD_RecursiveGetMemberOf
[/autoit] -
ja dann geht es
der user sah so aus: (distinguishedname über _AD_GetObjectProperties)
CN=Nachname\, Vorname,OU=XXX,OU=YYY,OU=ZZZ,DC=ort,DC=firma,DC=de
//edit: ich sehe gerade, dass in dieser Funktion "\," mit ',' ersetzt wird, glaube daran liegt es.
_AD_RecursiveGetMemberOf benötigt bestimmt "\,"
-
hmm auch im beispielscript wird im _ArrayDisplay nur eine 0 angezeigt.
Ich habe alle Biespielscripte im Include verzeichnis....
habe _AD_RecursiveGetMemberOf.au3 auch mal umbenannt in __AD_RecursiveGetMemberOf.au3 hat aber auch nix geholfen.
(Ich dachte eventuell, dass autoit denkt, dass es die Funktion 2mal gibt)so sieht die Datei aus:
[autoit]#AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
[/autoit][autoit][/autoit][autoit]
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y
; *****************************************************************************
; Example 1
; Returns a recursively searched list of groups the currently logged on user
; is a member of.
; For groups that are inherited, the FQDN of the group or user, and the FQDN(s)
; of the group(s) it was inherited from, seperated by '|'
; *****************************************************************************
#include <AD.au3>; Open Connection to the Active Directory
[/autoit][autoit][/autoit][autoit]
_AD_Open()
If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended); Returns a recursively searched list of groups the currently logged on user is a member of
[/autoit][autoit][/autoit][autoit]
Global $aUser = _AD_RecursiveGetMemberOf(@UserName, 10, 1)
If @error > 0 Then
MsgBox(64, "Active Directory Functions - Example 1", "User '" & @UserName & "' has not been assigned to any group")
Else
; For groups that are inherited, the return is the FQDN of the group or user, and the FQDN(s) of the group(s) it
; was inherited from, seperated by '|'
_ArrayDisplay($aUser, "Active Directory Functions - Example 1 - Group names user '" & @UserName & "' is a member of")
EndIf; Close Connection to the Active Directory
[/autoit]
_AD_Close() -
es wird eine 0 zurückgegeben
-
Für welche Fälle benötigt Ihr eine rekursive Funktion von _AD_IsMemberOf?
In der Anleitung steht: This function does not verify membership in any nested groups."
Ich dachte, dass es nützlich wäre, wenn man mit dieser Funktion auch herausfinden könnte, dass jemand indirekt Mitglied der Gruppe ist.
(Im Moment mache ich den Umweg über _AD_RecursiveGetMemberOf und suche dann mit _ArraySearch
)So nun zur _Ad_RecursiveGetGroupMembers :
Funktioniert soweit
Kleiner Fehler habe ich noch gefunden: Im Array befinden sich auch noch die Gruppen, die in den Gruppen sind.
Ist dies richtig? oder sollten da am Schluss nurnoch die Mitglieder vorhanden sein?Beides könnte nützlich sein.
Meistens (in meinen Fällen) benötigt man nur die Mitglieder der Gruppen, nicht die verschachtelten Gruppen selber
oder?
Wenn es für dich nicht soviel Aufwand macht, dann würde ich noch einen oder zwei Parameter hinzufügen, wo man dies Regeln kann. (Nur Gruppen Rekusiv anzeigen, nur User anzeigen, wenn beide TRUE, dann beide anzeigen). Nur ein Vorschlag
Oder sollte dies schon der 3 Parameter ($bListInherited) festlegen?
Wenn ja, dann scheint er nicht zu funktionieren (bei mir).Wieder mal vielen Dank!
Gruß
GerhardSchr//Edit: habe gerade bemerkt, dass nach dem Update der AD.au3 _AD_RecursiveGetMemberOf nicht mehr funktioniert. Anscheinend hat sich dort auch etwas geändert?
-
ich werde mir das nochmal genauer anschauen, ob da nicht noch irgendetwas anderes falsch ist.
Ich werde mal testgruppen/user anlegen.
-
stimmt sind die Beispiele

ich habe mir mal eine übergangslösung für _AD_RecursiveGetGroupMembers gebastelt:
[autoit]$test = _AD_RecursiveGetGroupMembers ("ShareManagement_Nas_Drucker")
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]
_ArrayDisplay ($test)Func _AD_RecursiveGetGroupMembers ($group)
[/autoit][autoit][/autoit][autoit]
If Not IsDeclared ("groups") Then Global $groups[1]$tmpgroups = _AD_GetGroupMembers ($group)
[/autoit][autoit][/autoit][autoit]$fqdn = 0
[/autoit][autoit][/autoit][autoit]For $tmpgroup = 1 To UBound ($tmpgroups) -1
[/autoit][autoit][/autoit][autoit]
If _AD_GetObjectClass ($tmpgroups[$tmpgroup]) == "user" Then
If $fqdn = 1 Then
;~ MsgBox (0, "Ist ein user (mit fqdn)", $tmpgroups[$tmpgroup])
_ArrayAdd ($groups, $tmpgroups[$tmpgroup])
Else
;~ MsgBox (0, "Ist ein user (ohne fqdn)", _AD_FQDNToSamAccountName ($tmpgroups[$tmpgroup]))
_ArrayAdd ($groups, _AD_FQDNToSamAccountName ($tmpgroups[$tmpgroup]))
EndIfElse
[/autoit][autoit][/autoit][autoit]
;~ MsgBox (0, "ist eine Gruppe", $tmpgroups[$tmpgroup])
_AD_RecursiveGetGroupMembers ($tmpgroups[$tmpgroup])
EndIf
Next_ArrayUnique ($groups)
[/autoit][autoit][/autoit][autoit]
_ArraySort ($groups)Return $groups
[/autoit]
EndFuncAllerdings scheint sie mir sehr langsam zu sein

Und ein Username filtert _ArrayUnique auch nicht raus komischerweiße... obwohl er völlig gleich (der selbe) ist.
Bei allen anderen doppelten funktioniert es
Und IsDeclared funktioniert anscheinend nicht mir local, daher habe ich da mal global benutzt

Gruß
GerhardSchr