retrodude
Goto Top

Via vbs department aus AD auslesen und in Variable speichern

Hallo

Ich versuche mit fogendem Script das Department Attribut eines spezifischen Users (%Username% weil per Loginscript) in eine Variable zu schreiben. Diese brauche ich für weitere Zwecke beim Login. Ich habe aber Probleme mit dem LDAP Zugriff für die Usersuche. Kann mir da jemand helfen?

Set wshShell = CreateObject( "WScript.Shell" )  
strUsername = WshShell.ExpandEnvironmentStrings("%USERNAME%")  
username = strUsername


Set objRoot = getobject("LDAP://RootDSE")  
domainname = objRoot.get("defaultNamingContext")  
wscript.echo  finduser(username,domainname)

 
Function FindUser(Byval UserName,Byval Domain)
 on error resume next

 set cn = createobject("ADODB.Connection")  
 set cmd = createobject("ADODB.Command")  
 set rs = createobject("ADODB.Recordset")  

 cn.open "Provider=ADsDSOObject;"  
 
cmd.activeconnection=cn
cmd.commandtext="SELECT ADsPath FROM ‘LDAP://" & Domain & "‘ WHERE sAMAccountName = ‘" & UserName & "‘"  
WScript.Echo cmd.CommandText 
 set rs = cmd.execute

 if err<>0 Then
  FindUser="Error connecting to Active Directory Database:" & err.description  
 else
  if not rs.BOF And not rs.EOF Then
        rs.MoveFirst
        FindUser = rs(0)
  Else
   FindUser = "Not Found"  
  end If
 end If
 cn.close
end Function

Content-ID: 191611

Url: https://administrator.de/contentid/191611

Ausgedruckt am: 17.11.2024 um 11:11 Uhr

60730
60730 21.09.2012 um 13:57:10 Uhr
Goto Top
Moin,


warum so kompliziert?
Ich versuche mit fogendem Script das Department Attribut eines spezifischen Users (%Username% weil per Loginscript) in eine Variable zu schreiben.

  • das bedeutet doch jeder User muß bei jeder Anmeldung die AD abfragen und dann noch via vbs...
Diese brauche ich für weitere Zwecke beim Login.

  • Warum nicht ganz simpel irgendwas a'la
dsquery user -limit 0 |dsget user -samid -dept>\\server\freigabe\datei.suffix
einmal am Tag auf nem Server laufen lassen (so oft werden sich die Departement Infos ja nicht ändern)
Und der User sucht sich mit ner kurzen schleife aus der Textdatei seinen Usernamen und das dazugehörige Department aus?

Oder wenn dir das zu komplex ist ein
dsquery user -samid %username% |dsget user -dept|findstr /v "dept dsget"  
tuts doch auch, wenn die dstools auf ner für den user zugänglichen Freigabe liegen?
RetroDude
RetroDude 21.09.2012 um 14:06:56 Uhr
Goto Top
Hallo

Das ist nicht so tragisch. ich werde die Suche auf eine Struktur eingrenzen. Dieser script läuft nicht bei jedem Login, sondern nur wenn eine bestimmte Applikation installiert wurde. Und dan nur beim ersten Login nach der Installation. Ich will den direkten Zugriff auf die AD. Diese Source ist stets aktuell. Mein Problem ist der LDAP Connect. Hast Du ne Idee wieso?

Gruss
60730
60730 21.09.2012 aktualisiert um 14:32:23 Uhr
Goto Top
Moin,

naja - neee ...

ich versteh es nicht...

  • wo liesst du denn die department nummer aus?
  • und wie funktioniert eine Abfrage %username% per LDAP, wenn du

  Else 
   FindUser = "Not Found"   
  end If 
sowas da drin hast - die Abfrage ist doch flüssiger als flüssig überflüssig?

Wobei der Bock ja wohl in Zeile 22 zu suchen ist

cmd.commandtext="SELECT ADsPath FROM 'LDAP://" & Domain & "' WHERE sAMAccountName = '" & UserName & "'"  

ganz kleine aber feine Unterschiede face-wink
RetroDude
RetroDude 21.09.2012 um 16:07:23 Uhr
Goto Top
Hallo

Ich habe mir gedacht so:

Set objUser = finduser(username,domainname)
strUserDepartment = objUser.Get("department")  

bin mir noch nicht sichr obs klappt.. wie siehst Du das? Hatte gerade keine Zeit für meinen Skript, bin deshalb noch nicht weiter..

Gruss und Danke!
60730
60730 21.09.2012 aktualisiert um 16:18:48 Uhr
Goto Top
Salve,

wie ich mir das gedacht hab?
Stand doch oben schon face-wink

Und wie oben angedeutet, ich steh halt in Sachen Loginscript auf nen Quickie, dessen Quellcode ich via eine Zigarettenlänge per Rauchzeichen durchmorsen kann.

Ps: Das Problem "Probleme mit LDAP Zugriff aus VBScript" ist dann wohl gelöst?
Änder den Titel um in "via vbs department aus AD auslesen" um, dann findet sich betimmt jemand, der lange Scripte mag.

Gruß ich hab jetzt Eierfabend und Ochenwende
RetroDude
RetroDude 21.09.2012 um 16:25:37 Uhr
Goto Top
Hallo

Das Problem liegt in der Tat in der von Dir erwähnten Zeile, ich weis nur nicht warum... Diese Funktio ist ergänzend für ein monströses vbscript. deshalb muss das reinpassen und flexibel bleiben.
Den Not Found kann man als negativen Rückgabewert verstehen.. face-wink
Danke trotzdem!
bastla
bastla 21.09.2012 aktualisiert um 19:19:43 Uhr
Goto Top
Hallo RetroDude und Limbo!

Ich würde das (wenn es doch eh immer um den aktuellen User gehen soll) etwas kompakter versuchen:
Set User = GetObject("LDAP://" & CreateObject("ADSystemInfo").UserName)  
WScript.Echo User.Department
Abgesehen davon: Auch mit der von Limbo vorgeschlagenen Zeile 22 kein Erfolg?

Grüße
bastla
60730
60730 22.09.2012 um 09:50:16 Uhr
Goto Top
Moin,
(ot)

@ bastla: die frage hatte vorher ne andere ueberschrift.

@to: schau dir die betreffende zeile mal genau an, das ist ein moechtegern sql statement und sql "braucht" genau dieses zeichen, nicht das andere (mein eipad kann weder das eine, noch das andere).

(/ot)

Gruss
RetroDude
RetroDude 22.09.2012 um 11:29:58 Uhr
Goto Top
Hallo zusammen

Danke für den Input. Werde es nächste Woche versuchen.

Schönes Wochendende Euch beiden.

Gruss
Retrodude
RetroDude
RetroDude 25.09.2012 um 17:38:47 Uhr
Goto Top
funktioniert wunderbar! Danke für diese elegante Lösung Bastla!

Gruss