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.
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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 259071
Url: https://administrator.de/contentid/259071
Ausgedruckt am: 21.11.2024 um 19:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo torben.dj,
das machst du so:
Grüße Uwe
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
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:Leider funktionieren die ActiveDirectory Befehle in diesem Fall nicht, da es sich bei dem
LDAP Adress-Server um ein altes Linux System handelt.
http://stackoverflow.com/questions/702998/connecting-to-openldap-server ...