User im AD suchen
Hallo,
bin auf der Suche nach einer Möglichkeit mit VB im AD einen User zu finden wenn ich vorher den Anmeldenamen mitgebe.
Das ganze soll dazu dienen die Terminal Server Eigenschaften eines Benutzers auszulesen.
Ich gebe dazu den Anmeldenamen ein und das Skript soll mir den User im gesamten AD suchen und die TS-Eigenschaften ausgeben.
Habe es bisher geschafft mit:
struser = Username
Wobei bei der Lösung der Pfad zum User bereits vorgegeben ist.
Gibt es da evtl. eine Möglichkeit mit subtree oder so ?
Gruss
SKID
bin auf der Suche nach einer Möglichkeit mit VB im AD einen User zu finden wenn ich vorher den Anmeldenamen mitgebe.
Das ganze soll dazu dienen die Terminal Server Eigenschaften eines Benutzers auszulesen.
Ich gebe dazu den Anmeldenamen ein und das Skript soll mir den User im gesamten AD suchen und die TS-Eigenschaften ausgeben.
Habe es bisher geschafft mit:
Set objUser = GetObject("LDAP://cn=" & struser &" ,ou=Useranlage,ou=Anwender,dc=meine,dc=domaene,dc=de")
struser = Username
Wobei bei der Lösung der Pfad zum User bereits vorgegeben ist.
Gibt es da evtl. eine Möglichkeit mit subtree oder so ?
Gruss
SKID
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 40814
Url: https://administrator.de/contentid/40814
Ausgedruckt am: 05.11.2024 um 19:11 Uhr
9 Kommentare
Neuester Kommentar
Moin skid,
ich bin da auch nur Laie, aber IMHO geht es nur über ADO-Datenbankabfrage.
Aber ich lasse mir gern einen kürzeren Weg zeigen..
Wenn Du den Accountnamen kennst, dann sollte es so gehen:
...wobei ich alle Schnörkel weggelassen habe.
Ein Accountname als Argument wird erwartet. Keine Fehlerbehandlung.
Beispiel:
Gruß
Biber
ich bin da auch nur Laie, aber IMHO geht es nur über ADO-Datenbankabfrage.
Aber ich lasse mir gern einen kürzeren Weg zeigen..
Wenn Du den Accountnamen kennst, dann sollte es so gehen:
'---------snipp GetAnUser.vbs
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
objConnection.Open "Provider=ADsDSOObject;"
samAccountname = wscript.arguments(0)
objCommand.ActiveConnection = objConnection
objCommand.CommandText = "<LDAP://" & strDNSDomain & ">;(&(objectCategory=User)(samAccountName=" & samAccountName & "));distinguishedName;subtree"
Set objRecordset = objCommand.Execute
If objRecordset.RecordCount = 1 Then
wscript.echo objRecordSet.fields("distinguishedName")
end if
'---------snipp GetAnUser.vbs
...wobei ich alle Schnörkel weggelassen habe.
Ein Accountname als Argument wird erwartet. Keine Fehlerbehandlung.
Beispiel:
>cscript //nologo getAnUser.vbs Biber03
CN=BIBER03,CN=Users,DC=bla,DC=blubb
Gruß
Biber
Tja, skid,
reicht es dafür nicht, wenn Du die Properties, die Du abfragen/auswerten willst, in die Command.Text-Anweisung mit einbaust?
objCommand.CommandText = "<LDAP://" & strDNSDomain & ">;_
(&(objectCategory=User)(samAccountName=" & samAccountName & ")); _
distinguishedName,TerminalServicesHomeDrive, TerminalServicesProfilePath;subtree"
Wie gesagt, ich bin da auch Laie und was ich wirklich gut kann, ist Kochen...
Gruß
Biber
reicht es dafür nicht, wenn Du die Properties, die Du abfragen/auswerten willst, in die Command.Text-Anweisung mit einbaust?
objCommand.CommandText = "<LDAP://" & strDNSDomain & ">;_
(&(objectCategory=User)(samAccountName=" & samAccountName & ")); _
distinguishedName,TerminalServicesHomeDrive, TerminalServicesProfilePath;subtree"
Wie gesagt, ich bin da auch Laie und was ich wirklich gut kann, ist Kochen...
Gruß
Biber
Hmm, skid,
so was lässt mir ja auch keine Ruhe... habe mich da ein wenig eingelesen.
Es ist in der Tat so, dass unterschiedliche Informationen über die unterschiedlichen ADS-Interfaces bzw. Provider sicht- und bearbeitbar sind.
Punkt.
Heißt zum Beispiel: Die Antwort auf Deine Teilfrage: "Kann ich irgendwie an den Pfad des Users kommen, wenn ich nur den Accountnamen weiß?" ...
diese Frage war schon von mir richtig beantwortet (allerdings ohne selbst alle Hintergründe zu kennen).
Für diesen Zweck kann ich mir ein objUser über den Provider ADsDSOObject holen. Dieses Object hat auch Eigenschaften, die ich auswerten und auch neu setzen kann - aber ist nicht identisch mit dem objUser, das ich über das andere Interface, über den vollständigen Userpfad mit OU und DC bekomme.
Diesen Unterschied kannst Du auch über GUI-Tools nachvollziehen.
Das "schmalbrüstigere" M$-Tool nennt sich auf ausländisch "Active Directory Users and Computers" und das umfassendere "ADSIEdit.exe". Sollten beide beim 2003Server dabei sein.
Der langen Schreibe kurzer Sinn:
-Wenn Du "nur" den Account weißt: der ist in der Domäne eindeutig. Also lässt der sich wie oben von mir skizziert als ein Datensatz rausfieseln - so dass Du den DistinguishedName rauslutschen kannst.
Mit diesem wiederum musst Du dann Dein "vollständiges" User-Object holen, also mit frisch gelesenen OU und DC-Infos nochmal
Nur bei diesem UserObject kannst Du diese TerminalServices-Attribute oder auch den DisplayName ändern (das zweite war auch neulich hier gefragt worden).
Gruß
Biber
P.S. Ja, kochen kann ich auch. Dauert aber meist genauso lange...
so was lässt mir ja auch keine Ruhe... habe mich da ein wenig eingelesen.
Es ist in der Tat so, dass unterschiedliche Informationen über die unterschiedlichen ADS-Interfaces bzw. Provider sicht- und bearbeitbar sind.
Punkt.
Heißt zum Beispiel: Die Antwort auf Deine Teilfrage: "Kann ich irgendwie an den Pfad des Users kommen, wenn ich nur den Accountnamen weiß?" ...
diese Frage war schon von mir richtig beantwortet (allerdings ohne selbst alle Hintergründe zu kennen).
Für diesen Zweck kann ich mir ein objUser über den Provider ADsDSOObject holen. Dieses Object hat auch Eigenschaften, die ich auswerten und auch neu setzen kann - aber ist nicht identisch mit dem objUser, das ich über das andere Interface, über den vollständigen Userpfad mit OU und DC bekomme.
Diesen Unterschied kannst Du auch über GUI-Tools nachvollziehen.
Das "schmalbrüstigere" M$-Tool nennt sich auf ausländisch "Active Directory Users and Computers" und das umfassendere "ADSIEdit.exe". Sollten beide beim 2003Server dabei sein.
Der langen Schreibe kurzer Sinn:
-Wenn Du "nur" den Account weißt: der ist in der Domäne eindeutig. Also lässt der sich wie oben von mir skizziert als ein Datensatz rausfieseln - so dass Du den DistinguishedName rauslutschen kannst.
Mit diesem wiederum musst Du dann Dein "vollständiges" User-Object holen, also mit frisch gelesenen OU und DC-Infos nochmal
Set objUser = GetObject("LDAP://cn=" & struser &" ,ou=" & TeilstringAusDistinguishedName, x, y) & ", dc=" & _
TeilstringAusDistinguishedName, i, j) & ", dc=" .....)
Nur bei diesem UserObject kannst Du diese TerminalServices-Attribute oder auch den DisplayName ändern (das zweite war auch neulich hier gefragt worden).
Gruß
Biber
P.S. Ja, kochen kann ich auch. Dauert aber meist genauso lange...