torben.dj
Goto Top

LDAP Suche in verschiedenen OUs

Guten Morgen und ein frohes Neues,

im folgenden VBS-Skript kann ich anhand des angemeldeten Windows-Benutzers einen Adress-LDAP auslesen und mir zB Vorname, Nachname, Mailadresse etc ausgeben lassen.
Diese Angaben lasse ich in die Datei "Signatur.txt" schreiben.

On Error Resume Next 
Set fso = CreateObject("Scripting.FileSystemObject")  
sZDatei = "Signatur.txt"  
Set oZDatei = fso.OpenTextFile(sZDatei, 2, True)
Set WshNetwork = CreateObject("WScript.Network")  
Username = WshNetwork.UserName
Set objUser = GetObject _ 
   ("LDAP://ldap.firma.de:389/uid=" &UserName &",ou=Abteilung,ou=Ort,ou=People,o=Firma,c=de")  
oZDatei.Write "Mit freundlichen Grüßen" & vbCrLf & vbCrLf & vbCrLf  
oZDatei.Write objUser.givenname &" " & objUser.sn & vbCrLf & vbCrLf  
oZDatei.Write objUser.department & vbCrLf & vbCrLf
oZDatei.Write objUser.street & vbCrLf
oZDatei.Write objUser.postalcode &" " & objUser.l & vbCrLf & vbCrLf  
oZDatei.Write "Tel.: " & objUser.telephonenumber & vbCrLf  
oZDatei.Write "Mail: " & objUser.mail & vbCrLf  
oZDatei.Close

Das Problem bei diesem Skript ist, dass ich wissen muss, in welcher Unter-OU sich der Benutzer befindet.
In diesem Fall ist es Firma --> People --> Ort --> Abteilung

Da ich selbst nicht sehr firm in VBS bin, nun die eigentliche Frage:

Wie kann ich das vorhandene Skritpt verändern damit nach der "uid" OU-übergreifend gesucht wird?

Vielen Dank schon mal für die Hilfe.

Bevor die Frage aufkommt, warum ich auf diesem Wege eine Signatur erstellen möchte,
die ausgelesenen Variablen werden in weiteren Skripten noch für benutzerspezifische Einrichtungen verwendet.

Content-ID: 259071

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

Ausgedruckt am: 21.11.2024 um 19:11 Uhr

colinardo
colinardo 07.01.2015 aktualisiert um 10:42:29 Uhr
Goto Top
Hallo torben.dj,
das machst du so:
Const sZDatei = "Signatur.txt"  
Set fso = CreateObject("Scripting.FileSystemObject")  
Set objShell = CreateObject("Wscript.Shell")  

strUsername = objShell.ExpandEnvironmentStrings("%username%")  
set objUser = FindAccount(strUsername)
if not objUser is nothing then
	Set oZDatei = fso.OpenTextFile(sZDatei, 2, True)
	oZDatei.Write "Mit freundlichen Grüßen" & vbCrLf & vbCrLf & vbCrLf  
	oZDatei.Write objUser.givenname &" " & objUser.sn & vbCrLf & vbCrLf  
	oZDatei.Write objUser.department & vbCrLf & vbCrLf
	oZDatei.Write objUser.street & vbCrLf
	oZDatei.Write objUser.postalcode &" " & objUser.l & vbCrLf & vbCrLf  
	oZDatei.Write "Tel.: " & objUser.telephonenumber & vbCrLf  
	oZDatei.Write "Mail: " & objUser.mail & vbCrLf  
	oZDatei.Close
Else
	' Kein User mit diesem Loginnamen gefunden'  
End if

Function FindAccount(strUserName)
	On Error Resume Next
	Dim adoCommand, adoConnection
	Dim varBaseDN, varFilter
	Dim objRootDSE, varDNSDomain, strQuery, adoRecordset

	Set adoCommand = CreateObject("ADODB.Command")  
	Set adoConnection = CreateObject("ADODB.Connection")  
	adoConnection.Provider = "ADsDSOObject"  
	adoConnection.Open "Active Directory Provider"  
	Set adoCommand.ActiveConnection = adoConnection
	
	' Search entire Active Directory domain.  
	Set objRootDSE = GetObject("LDAP://RootDSE")  
	
	varDNSDomain = objRootDSE.Get("defaultNamingContext")  
	varBaseDN = "<LDAP://" & varDNSDomain & ">"  
	
	' Filter for user objects.  
	varFilter = "(&(objectCategory=person)(objectClass=user)(SamAccountName=" & strUserName & "))"  
	
	' Construct the LDAP syntax query.  
	adoCommand.CommandText = varBaseDN & ";" & varFilter & ";ADSPath;Subtree"  
	adoCommand.Properties("Page Size") = 2  
	adoCommand.Properties("Timeout") = 20  
	adoCommand.Properties("Cache Results") = False  
	Set adoRecordset = adoCommand.Execute
	adoRecordset.MoveFirst

	If adoRecordset.RecordCount > 0 Then
		set FindAccount = GetObject(adoRecordset("ADSPath"))  
	else
		set FindAccount = Nothing
	End If
	
	adoRecordset.Close
	adoConnection.Close
End Function
Grüße Uwe
torben.dj
torben.dj 07.01.2015 um 12:05:42 Uhr
Goto Top
Danke für die Antwort.
Leider funktionieren die ActiveDirectory Befehle in diesem Fall nicht, da es sich bei dem
LDAP Adress-Server um ein altes Linux System handelt.
colinardo
colinardo 07.01.2015 um 12:12:06 Uhr
Goto Top
Zitat von @torben.dj:
Leider funktionieren die ActiveDirectory Befehle in diesem Fall nicht, da es sich bei dem
LDAP Adress-Server um ein altes Linux System handelt.
lässt sich anpassen:
http://stackoverflow.com/questions/702998/connecting-to-openldap-server ...
torben.dj
torben.dj 08.01.2015 um 08:21:21 Uhr
Goto Top
Manchmal sind es die kleinen Dinge, die den Unterschied machen.
Wenn ich einfach mal anstelle von LDAP nach OpenLDAP gesucht hätte, wäre ich schon schon schlauer.
Danke für den Link. Ich werde es mal versuchen.