redryder
Goto Top

Word VBA Attribute eines nicht angemeldeten Users aus dem AD lesen

Hallo Admins,

ich habe eine Frage, kann man via VBA (WORD 2003) die Attribute (Firma, Telefonnummer, Email, Fax.....) eines Users, der nicht der angemeldete User ist, aus dem AD auslesen?
die Werte des angemeldeten Users habe ich schon gefunden.
Aber bekomme ich die anderen auch?
Vielen Dank für Eure Hilfe.

Content-Key: 220213

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

Ausgedruckt am: 29.03.2024 um 12:03 Uhr

Mitglied: bastla
bastla 23.10.2013 um 16:15:29 Uhr
Goto Top
Hallo Redryder!

Schau mal bei den Scripting Guys vorbei ...

Grüße
bastla
Mitglied: Redryder
Redryder 23.10.2013 um 16:51:17 Uhr
Goto Top
Danke für Deine Antwort.
Leider werd ich aus den Scripts net ganz schlau.
Ich lese die Daten des angemeldeten Users folgendermassen aus:

Set objSysInfo = CreateObject("ADSystemInfo")
qQuery = "LDAP://" & objSysInfo.UserName
Set objuser = GetObject(qQuery)

strFirma = objuser.company
...
...
...
Damit erhalte ich die Werte aus dem AD, die ich brauche. Leider benötige ich auch Werte anderer User, die gerade nicht an diesem PC angemeldet sind.
(Sekretärin schreibt einen Brief für diverse Kollegen. Möchte deren AD-Werte verwenden)

Ich habe auch schon versucht, den LDAP String zusammenzubasteln. Das ging gewaltigin die Hose. Objekt nicht auf Server vorhanden mit Laufzeitfehler...
Hat jemand noch andere Ideen?
Mitglied: bastla
bastla 23.10.2013 um 17:00:43 Uhr
Goto Top
Hallo Redryder!

Du kannst ja die Suche zB mit
"SELECT Name FROM 'LDAP://cn=Users,dc=fabrikam,dc=com' WHERE objectCategory='user' AND sAMAccountName = '" & Anmeldename & "'"
durchführen (wobei natürlich die Variable "Anmeldename" vorweg bestückt werden muss) ...

Grüße
bastla
Mitglied: colinardo
colinardo 23.10.2013 aktualisiert um 17:42:17 Uhr
Goto Top
Halo Redryder,
und zweitens ist es wichtig zu aller erst im AD die Berechtigung für den Abfragenden Useraccount zu vergeben... wenn du das Script nicht mit entsprechenden Rechten startest.
Grüße Uwe
Mitglied: colinardo
colinardo 23.10.2013, aktualisiert am 24.10.2013 um 21:21:09 Uhr
Goto Top
back-to-topBeispiel:
(Zeile 1 an dein Umgebung anpassen, in Zeile 2 den Login-Namen des Accounts angeben den du abfragen möchtest)
Die eigentliche Abfrage der AD-Eigenschaften nimmst du dann ab Zeile 31 vor.
Der User der das Script aufruft muss natürlich die entsprechenden Rechte auf dem AD-Objekt haben das er abruft. Diese kannst du z.B. mit ADSIEdit auf dem Server entsprechend setzen. Oder das Script mit "RunAs" und einem entsprechendem User der diese Rechte hat, starten.
StartNode = "cn=Users,dc=fabrikam,dc=com"  
strAccount = "HMustermann"  

Set objCommand = CreateObject("ADODB.Command")  
Set objConnection = CreateObject("ADODB.Connection")  
objConnection.Provider = "ADsDSOObject"  
objConnection.Open "Active Directory Provider"  
objCommand.ActiveConnection = objConnection
SearchScope = "subtree"  

FilterString = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" & strAccount & "))"  
Attributes = "adspath"  

LDAPQuery = "<LDAP://" & StartNode & ">;" & FilterString & ";" _  
        & Attributes & ";" & SearchScope  

objCommand.CommandText = LDAPQuery
objCommand.Properties("Page Size") = 1500  
objCommand.Properties("Timeout") = 30  
objCommand.Properties("Cache Results") = False  

Set objRecordSet = objCommand.Execute

If not objRecordSet.eof then 
   objRecordSet.MoveFirst

   Do Until objRecordSet.EOF
      strUserPath = objRecordSet.Fields("ADsPath").Value  
      Set objUser = GetObject(strUserPath)
      '-------get attributes -----------  
      msgbox objUser.displayName
      '--------------------------------------  
      objRecordSet.MoveNext
   Loop
End If

objRecordset.Close
objConnection.Close
msgbox "Fertig"  
Grüße Uwe
Mitglied: Redryder
Redryder 24.10.2013 um 13:41:03 Uhr
Goto Top
Danke für die Antwort.
Da der qQuery-String ja vom aussehen identisch ist (abgesehen vom Usernamen) klingt es logisch, dass User A das Profil von User B nicht auslesen kann ohne entsprechende Berechtigung. Die richtige Berechtigung wäre dann ja wohl lesen - oder?
Wenn ich aus Word-VBA heraus einen Select schicken will, muss ich den doch mit runsql beginnen oder?
Das mit dem RunAs funktioniert doch nur, wenn ich ein Windows Skript (vbs, vb oder cmd) aufrufe - oder? kann man so etwas auch in VBA machen?

Ich bin in der Beziehung noch Anfänger.
Danke schon mal für Eure hilfe...
Mitglied: colinardo
colinardo 24.10.2013 aktualisiert um 21:44:55 Uhr
Goto Top
Zitat von @Redryder:
Die richtige Berechtigung wäre dann ja wohl lesen - oder?
Ja, dies lässt sich im AD sehr fein einstellen, bis auf Property-Ebene. Setz die entsrpechenden zusätzlichen Rechte nur für die benötigten Properties der AD-Objekte und gut is, dann musst du dein Script nicht als Admin oder anderer User starten..(dein Freund hierfür ADSIEdit]
Das mit dem RunAs funktioniert doch nur, wenn ich ein Windows Skript (vbs, vb oder cmd) aufrufe - oder? kann man so etwas auch in
VBA machen?
http://blogs.office.com/b/microsoft-access/archive/2009/11/11/running-a ...

Grüße Uwe
Mitglied: Redryder
Redryder 25.10.2013 um 08:45:18 Uhr
Goto Top
Moin Uwe,

ich habe gerade geschaut. Im ADSI Editor würde ich bei den authentifizierten Usern die Berechtigung (unter den Sicherheitseinstellungen der OU) Inhalte auflisten, Eigenschaften lesen und Berechtigung lesen geben. (Ist standart mäßig eingestellt).
Anhand dieser Berechtigunh müsste doch eigentlich jeder an der Domäne angemeldete und authentifizierte User die Berechtigung haben, die Attribute der OU zu lesen -oder?
Die Berechtigungen müssten doch nach unten (die Inhalte der OU) weiterveerbt werden.
Liege ich falsch, oder bin ich auf dem richtigen Weg?
Mitglied: colinardo
colinardo 25.10.2013 um 17:32:01 Uhr
Goto Top
Hallo nochmal,
Die Berechtigungen müssten doch nach unten (die Inhalte der OU) weiterveerbt werden.
wenn du dies in den Eigenschaften für die ACL angegeben hast, dann ja:

3712fa4c906bbbfdde9de4a5c87fa3b7

Grüße Uwe