Ich mal wieder
hab ein Problem mit dieser Funktion "_ADGetObjectsInOU" aus der "ADFunctions.au3".
Und zwar möchte ich als filter einen Namen verwenden z.B "name=Max*" damit ich aus dem AD per LDAP alle Namen mit Max bekomme.
Wenn ich es direkt in den Funktionsaufruf reinschreibe das es so aussieht:
_ADGetObjectsInOU(ByRef $ObjectArray, $ou, "name=Max*", $searchscope = 2, $datatoretrieve = "sAMAccountName", $sortby = "sAMAccountName")
[/autoit]Dann klappt das und ich bekomm ein Array voll mit Infos.
Jetzt möchte ich aber den Namen der gesucht werden soll von einer GUI haben als so z.B das ich ein Feld hab "User Name" und da gibt man dann den zusuchenden Namen ein.
wenn ich jetzt eine Variable mach die so aussieht:
[autoit]$Username = '"name=' & GUICtrlRead($txtUser) & '*"'
[/autoit]und dann meinen Funktionsaufruf so gestalte:
[autoit]_ADGetObjectsInOU(ByRef $ObjectArray, $ou, $Username , $searchscope = 2, $datatoretrieve = "sAMAccountName", $sortby = "sAMAccountName")
[/autoit]Dann bekomm ich immer einen Error das das Object nicht stimmt.
Die zugehörige Funktion aus der ADFunctions.au3 sieht so aus:
[autoit]; _ADGetObjectsInOU
; Returns an array of the objects in an OU
; $ou : The OU to retrieve from
; $filter : optional, default "name'*'". An additional LDAP filter if required.
; $searchscope : optional, default 2. 0 = base, 1 = one-level, 2 = sub-tree
; $datatoretrieve : optional, default "Name". A comma-seperated list of values to retrieve. More than one value will create
; a 2-dimensional array, array[0][0] will contain the number of items returned, which start at array[1][0]
Func _ADGetObjectsInOU(ByRef $ObjectArray, $ou, $filter = "(name=*)", $searchscope = 2, $datatoretrieve = "sAMAccountName", $sortby = "sAMAccountName")
Local $objRecordSet
$objCommand = ObjCreate("ADODB.Command")
$objCommand.ActiveConnection = $objConnection
$objCommand.Properties ("Page Size") = 256
$objCommand.Properties ("Searchscope") = $searchscope
$objCommand.Properties ("TimeOut") = 20
$strCmdText = "<LDAP://" & $strHostServer & "/" & $ou & ">;" & $filter & ";" & $datatoretrieve & ";subtree"
$objCommand.CommandText = $strCmdText
$objRecordSet = $objCommand.Execute
$recordcount = $objRecordSet.RecordCount
If $recordcount = 0 Then
$objCommand = 0
$objRecordSet = 0
Return 0
EndIf
If StringInStr($datatoretrieve, ",") Then
$dtrArray = StringSplit($datatoretrieve, ",")
Dim $ObjectArray[$recordcount + 1][$dtrArray[0]]
$ObjectArray[0][0] = $recordcount
$ObjectArray[0][1] = $dtrArray[0]
$count = 1
$objRecordSet.MoveFirst
Do
For $i = 1 To $dtrArray[0]
$ObjectArray[$count][$i - 1] = $objRecordSet.Fields ($dtrArray[$i]).Value
Next
$objRecordSet.MoveNext
$count += 1
Until $objRecordSet.EOF
Else
Dim $ObjectArray[$recordcount + 1]
$ObjectArray[0] = UBound($ObjectArray) - 1
If $ObjectArray[0] = 0 Then
$ObjectArray = 0
Return 0
Else
$count = 1
$objRecordSet.MoveFirst
Do
$ObjectArray[$count] = $objRecordSet.Fields ($datatoretrieve).Value
$objRecordSet.MoveNext
$count += 1
Until $objRecordSet.EOF
EndIf
EndIf
$objCommand = 0
$objRecordSet = 0
Return 1
EndFunc ;==>_ADGetObjectsInOU
Und an der Stelle kommt der Error
[autoit]$objRecordSet = $objCommand.Execute
[/autoit]Ist bestimmt was banales, aber ich steh irgend wie auf dem Schlauch.
Vielleicht kann mir einer Helfen.
mfg
nefas
P.S. leider kann ich es erst morgen Früh auf der Arbeit testen da ich hier zuhause kein LDAP habe.
P.S.S.:
Hab es hinbekommen
lösung sieht so aus:
[autoit]
$UserLastName = GUICtrlRead($txtUser)&"*"
_ADGetObjectsInOU($asUser, $nefOU, "(&(Name="&$UserLastName&"))", 2, "DisplayName,samAccountName,co,l,telephonenumber,physicalDeliveryOfficeName,department,mail,global-ExtensionAttribute1,global-ExtensionAttribute2,distinguishedName,homeDirectory,scriptPath","DisplayName")
[/autoit]