ConsoleWrite eines Arrays bringt nie eine Ausgabe. Nimm _ArrayDisplay.
Active Directory Funktionen - Neue Version 1.5.0.0 freigegeben!
-
-
Danke!
so eine letzte Bitte, falls das möglich ist:
Die Telefonnummern im AD unter "telephoneNumber" sind im deutschen Format d.h. +49 (89) 1234-1234
Die Nummer, die ich aber vergleiche lautet 498912341234d.h. regex .. geht das direkt bei der Abfrage?
-
Nicht dass ich wüsste. Aber Du kannst die Abfrage ja so umbauen, dass alle User mit der Telefonnummer zurückgegeben werden und dann den Array durchsuchen,
-
mir arrays kenne ich mich nicht aus ,.. ubound und sowas ist das? ok aber danke
-
[autoit]
#include <AD.au3>
[/autoit][autoit][/autoit][autoit]
#include <File.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)Global $aObjects[1][1]
[/autoit]
Global $sOU = "" ; Search all OUs
$aObjects = _AD_GetObjectsInOU($sOU, "(&(objectcategory=person)(objectclass=user)(name=*))", 2, "sAMAccountName,telephoneNumber")
If @error > 0 Then
MsgBox(64, "Active Directory Functions - Example 1", "No OUs could be found")
Else
_ArrayDisplay($aObjects, "Active Directory Functions")
EndIf
; Close Connection to the Active Directory
_AD_Close()
; Array bearbeiten
For $i = 1 to $aObjects[1][0]
If $aObjects[$i][1] = "gewünschte Telefonnummer" Then
; Benutzer verarbeiten
Endif
Next -
ich stelle mich an der stelle ziemlich unbeholfen dar,..
ich mache das sicher falsch, weil ich den code nicht verstehe
via regex muss er das ja vorher auf zahlen reduzieren (+ und () ) entfernen,.. und dann vergleichen.C
Alles anzeigen#include <AD.au3> #include <File.au3> ; Open Connection to the Active Directory _AD_Open() If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended) Global $aObjects[1][1] Global $sOU = "" ; Search all OUs $aObjects = _AD_GetObjectsInOU($sOU, "(&(objectcategory=person)(objectclass=user)(name=*))", 2, "sAMAccountName,telephoneNumber") If @error > 0 Then MsgBox(64, "Active Directory Functions - Example 1", "No OUs could be found") Else ;~ _ArrayDisplay($aObjects, "Active Directory Functions") EndIf ; Close Connection to the Active Directory _AD_Close() ; Array bearbeiten For $i = 1 to $aObjects[1][0] If $aObjects[$i][2] = "+49 (089) 1234-1234" Then ; Benutzer verarbeiten _ArrayDisplay($aObjects[$i][1], "Active Directory Functions") Endif Next
-
Stimmt _ArrayDisplay zeigt nur ganze Arrays an, keine Elemente aus dem Array!
-
hallo Herbert,
das sollte dir weiterhelfen
[autoit]
[/autoit][autoit][/autoit][autoit]
#include <AD.au3>
#include <File.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)Global $aObjects[1][1]
[/autoit][autoit][/autoit][autoit]
Global $sOU = "" ; Search all OUs
$aObjects = _AD_GetObjectsInOU($sOU, "(&(objectcategory=person)(objectclass=user)(name=*))", 2, "sAMAccountName,telephoneNumber")
If @error > 0 Then
MsgBox(64, "Active Directory Functions - Example 1", "No OUs could be found")
Else
;_ArrayDisplay($aObjects, "Active Directory Functions")
EndIf
; Close Connection to the Active Directory
_AD_Close()
; Array bearbeiten
For $i = 1 to $aObjects[0][0];ConsoleWrite($aObjects[$i][1])
[/autoit][autoit][/autoit][autoit][/autoit]
If $aObjects[$i][1] = "+49 (89) 0000 0000" Then
; Benutzer verarbeiten
MsgBox(0,"",$aObjects[$i][0] & @crlf & $aObjects[$i][1])
Endif
Nextgruß gmmg
-
Herbert, ich würde Dir aber trotzdem eine ernsthafte Beschäftigung mit Arrays empfehlen.Das sind Kernfunktionen von AutoIt. Im Wiki (eventuell auch in diesem Forum) gibt es gute Tutorials dazu.
-
Hi, ich habe gestern festgestellt, das der Parametzer sehr wohl ausgelesen wird, aber warum auch immer liefert MS nicht das gewünschte Ergebnis so wie alle anderen Parameter sondern so was:
CodeuserParameters|CtxCfgPresent PCtxCfgPresent㔵攱戰ぢ LCtxWFProfilePath挵挵搶㠶㌷㈷〳ㄳ㈳㐳挵㐷㌷〷㈷昶㘶㤶挶㔶㐲挵搶㠶挵搶㔶㤷㔶㈷攲㐶㔶㐷挶㔶㘶〰.CtxMaxDisconnectionTimeっ㜲㤰〰 CtxMaxIdleTime〰㐷㝢(CtxMaxConnectionTime〰〰〰〰CtxCfgFlags1〰て㈲〹
Unter UserParameters wird der Wert für "CtxWFProfilePath" leider kryptisch ausgegeben.
Siehst Du da noch eine Chance da was vernünftiges raus zubekommen ?[Blockierte Grafik: http://www.selfadsi.de/img/tutorial/ad-user-attributes-14.png]
Falls noch einer suchen sollte:
[autoit]
[/autoit][autoit][/autoit][autoit]
func _Get_TSProfile($sAD_User)
$distingshedname = _AD_GetObjectAttribute($sAD_User, "distinguishedName")
local $oUser = __AD_ObjGet("LDAP://"& $distingshedname)
Return $oUser.TerminalServicesProfilePath
EndFuncfunc _Set_TSProfile($sAD_User)
[/autoit]
$distingshedname = _AD_GetObjectAttribute($sAD_User, "distinguishedName")
local $oUser = __AD_ObjGet("LDAP://"& $distingshedname)
$oUser.TerminalServicesProfilePath = "\\Server"&$sAD_User&"$\Profile" ;~ müsste angepasst werden
$oUser.SetInfo
EndFunc -
Ich teste die mal durch genau mein Ding.... Nur "Chef das mit den Userkonten.... wir sollten uns mal unterhalten..." könnte ein interessantes Gespräch werden.
-
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!
-
Alles senkrecht
Muss ich testen, kann gut sein, dass da noch ein Bug ist. Wäre nicht der erste. -
danke!
-
Alles senkrecht
Hast wohl die blaue Pille genommen.
-
Nö, zu jung dafür!
-
Nö, zu jung dafür!
oder dauergeil -
kann es sein, dass die _AD_RecursiveGetGroupMembers funktion (immernoch) neben den namen die enthaltenen Gruppen selbst ausgibt?
Hat nun etwas gedauert, sorry.
Die Funktion gibt rekursiv alles aus was in der angegebenen Gruppe enthalten ist (inkl. weiterer Gruppen).
Das sagt auch die engl. Beschreibung: "Takes a group and recursively returns a list of groups and members of the group."Du könntest für jedes zurückgegeben Array-Element die ObjetClass abfragen und Gruppen ignorieren.
Oder man könnte die Funktion aufbohren um statt eines 1D Arrays einen 2D Array mit weiteren Properties (z.B. ObjectClass) zurückzugeben.Wie siehst Du das?
-
hi water
schön von dir zu hörenvon meiner seite her wäre es schon besser, wenn nur die Benutzer ohne Gruppen enthalten wären....
Angenommen man will alle User, die in einer Gruppe sind löschen oder Homelaufwerke anlegen oder eine E-Mail senden oder oder oder :)))))
dann hat man immer nicht wirklich die richtigen datengegen einen Parameter, womit man das verhalten steuern kann hätte ich nix einzuwenden (wenn von deiner seite nichts dagegenspricht!)
Danke für die Antwort!
Zeigt mir, dass die UDF nicht tot ist. -
Wenn ich mir das "Problem" eher generell betrachte:
Die Funktion zeigt rekursiv an, welche Mitglieder eine Gruppe hat. Dies können User, Computer, Gruppen, Prinqueues etc. etc. sein. Nur die Gruppen herauszunehmen wäre dann vermutlich nur die halbe Miete. Wenn Du nur die User brauchst, dann müsste es eine Möglichkeit geben, alles andere zu filtern. Das kann aber relativ schnell komplex werden (besonders rekursiv) wenn z.B. User und Computer benötigt werden.
Ich tendiere im Moment eher dazu, die Menge der zurückgegebenen Datensätze nicht einzuschränken und das den User selbst machen zu lassen.Ich werde mal ein Beispiel basteln wie so was aussehen könnte.
-