andreasgrothe
Goto Top

Zugriff auf ADS

Hallo zusammen,

wer kann helfen und eine genaue Anleitung schicken:

für eine Anwendung (Access oder HTML Seite), würde ich gerne auf das ADS zugreifen.

Name, Vorname, Telefonnummer usw.

Wie kann man das realisieren?

Danke

Content-ID: 86231

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

Ausgedruckt am: 22.11.2024 um 13:11 Uhr

RDiller
RDiller 23.04.2008 um 17:16:25 Uhr
Goto Top
Hallo Andreas,

mit diesem Code kannst Du mit ACCESS auf das AD zugreifen.


Public Function Import_AD()
Dim sqls
Dim rstemp As Recordset

sqls = "Select * from AD" 'Das ist die Tabelle in die die Werte kommen. Alle Felder sind Text Felder mit 255 Characters
Set rstemp = CurrentDb.OpenRecordset(sqls)

'Open AD Connection
Set ado = CreateObject("ADODB.Connection")
ado.Provider = "ADSDSOObject"
ado.Open

Set rs = ado.Execute("<LDAP:DC=XXX,DC=XXX,DC=XXX,DC=XXX,DC=XXX>;(&(objectClass=user)(samaccountname=*));ADsPath;SubTree") ' Die XXX mit Deinen Werten füllen

rs.MoveFirst
'Loop till all objects are imported

Do Until rs.EOF
useradpath = rs.Fields.Item("ADsPath").Value
'Get the actual User Object
Set objUser = GetObject(useradpath)
'Add the fields to AD Table
On Error Resume Next
rstemp.AddNew
rstemp.Fields("ADPath") = useradpath
rstemp.Fields("FullName") = objUser.FullName
rstemp.Fields("Extensionattribute1") = objUser.Extensionattribute1
rstemp.Fields("distinguishedname") = objUser.distinguishedname
rstemp.Fields("sAMAccountName") = objUser.sAMAccountName
rstemp.Fields("Login") = objUser.Login
rstemp.Fields("givenName") = objUser.givenName
rstemp.Fields("sn") = objUser.sn
rstemp.Fields("c") = objUser.c
rstemp.Fields("co") = objUser.co
rstemp.Fields("Division") = objUser.Division
rstemp.Fields("physicalDeliveryOfficeName") = objUser.physicalDeliveryOfficeName
rstemp.Fields("displayname") = objUser.displayname
rstemp.Fields("company") = objUser.company
rstemp.Fields("manager") = objUser.manager
rstemp.Fields("userPrincipalName") = objUser.userPrincipalName
rstemp.Fields("assistant") = objUser.assistant
rstemp.Fields("st") = objUser.st
rstemp.Fields("title") = objUser.title
rstemp.Fields("employeeType") = objUser.employeeType
rstemp.Fields("telephoneNumber") = objUser.telephoneNumber
rstemp.Fields("department") = objUser.department
rstemp.Fields("logoncount") = objUser.logoncount
rstemp.Fields("objectcategory") = objUser.objectcategory
rstemp.Fields("home") = objUser.homephone
rstemp.Fields("mobile") = objUser.mobile
rstemp.Fields("homedirectory") = objUser.homedirectory
rstemp.Fields("homedrive") = objUser.homedrive
rstemp.Fields("pcode") = objUser.postofficebox
rstemp.Fields("street") = objUser.streetaddress
rstemp.Fields("town") = objUser.l
rstemp.Fields("faxno") = objUser.facsimileTelephonenumber
rstemp.Fields("initials") = objUser.initials
rstemp.Update
'clean objUser
Set objUser = Nothing
rs.MoveNext
Loop
On Error GoTo 0
rs.Close
ado.Close

End Function


Hier noch eine Liste von AD-Feldern :

objUser.operatorCount
objUser.otherFacsimileTelephoneNumber
objUser.otherHomePhone
objUser.otherIpPhone
objUser.otherLoginWorkstations
objUser.otherMailbox
objUser.otherMobile
objUser.otherPager
objUser.otherTelephone
objUser.otherWellKnownObjects
objUser.ou
objUser.ownerBL
objUser.pager
objUser.partialAttributeDeletionList
objUser.partialAttributeSet
objUser.personalPager
objUser.personalTitle
objUser.photo
objUser.physicalDeliveryOfficeName
objUser.pOPCharacterSet
objUser.pOPContentFormat
objUser.possibleInferiors
objUser.PostalAddress
objUser.postalCode
objUser.postofficebox
objUser.preferredDeliveryMethod
objUser.preferredLanguage
objUser.preferredOU
objUser.primaryGroupID
objUser.primaryInternationalISDNNumber
objUser.primaryTelexNumber
objUser.profilePath
objUser.protocolSettings
objUser.proxiedObjectName
objUser.proxyAddresses
objUser.publicDelegates
objUser.publicDelegatesBL
objUser.pwdLastSet
objUser.queryPolicyBL
objUser.registeredAddress
objUser.replicatedObjectVersion
objUser.replicationSensitivity
objUser.replicationSignature
objUser.replPropertyMetaData
objUser.replUpToDateVector
objUser.repsFrom
objUser.repsTo
objUser.revision
objUser.rid
objUser.roomNumber
objUser.sAMAccountType
objUser.scriptPath
objUser.sDRightsEffective
objUser.secretary
objUser.securityIdentifier
objUser.securityProtocol
objUser.seeAlso
objUser.serialNumber
objUser.serverReferenceBL
objUser.servicePrincipalName
objUser.showInAddressBook
objUser.showInAdvancedViewOnly
objUser.sIDHistory
objUser.siteObjectBL
objUser.sn
objUser.st
objUser.street
objUser.streetaddress
objUser.structuralObjectClass
objUser.submissionContLength
objUser.subRefs
objUser.subSchemaSubEntry
objUser.supplementalCredentials
objUser.supportedAlgorithms
objUser.systemFlags
objUser.targetAddress
objUser.telephoneAssistant
objUser.telephoneNumber
objUser.teletexTerminalIdentifier
objUser.telexNumber
objUser.terminalServer
objUser.textEncodedORAddress
objUser.thumbnailLogo
objUser.thumbnailPhoto
objUser.title
objUser.tokenGroups
objUser.tokenGroupsGlobalAndUniversal
objUser.tokenGroupsNoGCAcceptable
objUser.uid
objUser.unauthOrig
objUser.unauthOrigBL
objUser.unicodePwd
objUser.unmergedAtts
objUser.url
objUser.userAccountControl
objUser.userCert
objUser.userCertificate
objUser.userParameters
objUser.userPassword
objUser.userPKCS12
objUser.userPrincipalName
objUser.userSharedFolder
objUser.userSharedFolderOther
objUser.userSMIMECertificate
objUser.userWorkstations
objUser.uSNDSALastObjRemoved
objUser.USNIntersite
objUser.uSNLastObjRem
objUser.uSNSource
objUser.versionNumber
objUser.wbemPath
objUser.wellKnownObjects
objUser.whenChanged
objUser.whenCreated
objUser.wWWHomePage
objUser.x121Address
objUser.x500uniqueIdentifier
objUser.operatorCount
objUser.otherFacsimileTelephoneNumber
objUser.otherHomePhone
objUser.otherIpPhone
objUser.otherLoginWorkstations
objUser.otherMailbox
objUser.otherMobile
objUser.otherPager
objUser.otherTelephone
objUser.otherWellKnownObjects
objUser.ou
objUser.ownerBL
objUser.pager
objUser.partialAttributeDeletionList
objUser.partialAttributeSet
objUser.personalPager
objUser.personalTitle
objUser.photo
objUser.physicalDeliveryOfficeName
objUser.pOPCharacterSet
objUser.pOPContentFormat
objUser.possibleInferiors
objUser.PostalAddress
objUser.postalCode
objUser.postofficebox
objUser.preferredDeliveryMethod
objUser.preferredLanguage
objUser.preferredOU
objUser.primaryGroupID
objUser.primaryInternationalISDNNumber
objUser.primaryTelexNumber
objUser.profilePath
objUser.protocolSettings
objUser.proxiedObjectName
objUser.proxyAddresses
objUser.publicDelegates
objUser.publicDelegatesBL
objUser.pwdLastSet
objUser.queryPolicyBL
objUser.registeredAddress
objUser.replicatedObjectVersion
objUser.replicationSensitivity
objUser.replicationSignature
objUser.replPropertyMetaData
objUser.replUpToDateVector
objUser.repsFrom
objUser.repsTo
objUser.revision
objUser.rid
objUser.roomNumber
objUser.sAMAccountType
objUser.scriptPath
objUser.sDRightsEffective
objUser.secretary
objUser.securityIdentifier
objUser.securityProtocol
objUser.seeAlso
objUser.serialNumber
objUser.serverReferenceBL
objUser.servicePrincipalName
objUser.showInAddressBook
objUser.showInAdvancedViewOnly
objUser.sIDHistory
objUser.siteObjectBL
objUser.sn
objUser.st
objUser.street
objUser.streetaddress
objUser.structuralObjectClass
objUser.submissionContLength
objUser.subRefs
objUser.subSchemaSubEntry
objUser.supplementalCredentials
objUser.supportedAlgorithms
objUser.systemFlags
objUser.targetAddress
objUser.telephoneAssistant
objUser.telephoneNumber
objUser.teletexTerminalIdentifier
objUser.telexNumber
objUser.terminalServer
objUser.textEncodedORAddress
objUser.thumbnailLogo
objUser.thumbnailPhoto
objUser.title
objUser.tokenGroups
objUser.tokenGroupsGlobalAndUniversal
objUser.tokenGroupsNoGCAcceptable
objUser.uid
objUser.unauthOrig
objUser.unauthOrigBL
objUser.unicodePwd
objUser.unmergedAtts
objUser.url
objUser.userAccountControl
objUser.userCert
objUser.userCertificate
objUser.userParameters
objUser.userPassword
objUser.userPKCS12
objUser.userPrincipalName
objUser.userSharedFolder
objUser.userSharedFolderOther
objUser.userSMIMECertificate
objUser.userWorkstations
objUser.uSNChanged
objUser.uSNCreated
objUser.uSNDSALastObjRemoved
objUser.USNIntersite
objUser.uSNLastObjRem
objUser.uSNSource
objUser.versionNumber
objUser.wbemPath
objUser.wellKnownObjects
objUser.whenChanged
objUser.whenCreated
objUser.wWWHomePage
objUser.x121Address
objUser.x500uniqueIdentifier

Einige dieser Felder sind multidimensional (das kannst Du über ADSI-EDIT herausfinden, oder wenn die Funktion auf ainen Fehler läuft face-wink) ) und müssen entsprechend in ein Variantfeld zwischengespeichert werden

Mit der folgenden Funktion kannst Du alle Objektnamen ermitteln:

Public Function Get_ObjectNames()
'Show all objectnames
Set ado = CreateObject("ADODB.Connection")
ado.Provider = "ADSDSOObject"
ado.Open
Set rs = ado.Execute("<LDAP:
DC=XXX,DC=XXX,DC=XXX,DC=XXX,DC=XXX>;(&(objectClass=user)(samaccountname=*));ADsPath;SubTree") ' Die XXX mit Deinen Werten füllen

rs.MoveFirst
Do Until rs.EOF
useradpath = rs.Fields.Item("ADsPath").Value
Set objUser = GetObject(useradpath)
Set objSchema = GetObject(objUser.Schema)
For Each Property In objSchema.MandatoryProperties
Debug.Print Property
Next
For Each Property In objSchema.OptionalProperties
Debug.Print Property
Next
Set objSchema = Nothing
Set objUser = Nothing
Exit Do
rs.MoveNext
Loop
rs.Close
ado.Close
End Function


Ich hoffe, damit kommst Du weiter


Gruß

Ralf
AndreasGrothe
AndreasGrothe 24.04.2008 um 13:19:37 Uhr
Goto Top
Wie muss ich das in Access machen?
makro oder so? Was genau muss hier stehen: <LDAP://DC=XXX,DC=XXX,DC=XXX,DC=XXX,DC=XXX>
RDiller
RDiller 24.04.2008 um 17:54:13 Uhr
Goto Top
Hallo Andreas,

das sind VBA-Module

Was in <LDAP:DC=XXX,DC=XXX,DC=XXX,DC=XXX,DC=XXX> zu stehen hat hängt von der Konfiguration Deines AD's ab. Schau Dir einfach mal ein Userobjekt an, da findest Du den LDAP-Pfad.

Ansosnsten kannst Du die ersten 4 DC Einträge mit dieser Funktion auslesen:

Public Sub Get_Object_Names()
On Error Resume Next

Const ADS_SCOPE_SUBTREE = 2

Set objRootDSE = GetObject("LDAP:
RootDSE")
strConfigurationNC = objRootDSE.Get("configurationNamingContext")

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

objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

objCommand.CommandText = _
"SELECT ADsPath FROM 'LDAP:" & strConfigurationNC & "' WHERE objectClass='nTDSDSA'"
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

Set objParent = GetObject(GetObject(objRecordSet.Fields("ADsPath")).Parent)

Debug.Print objParent.distinguishedname

End Sub


Da komm dann so etwas heraus:

CN=CN1 ,CN=Servers,CN=CN2,CN=Sites,CN=Configuration,DC=de,DC=int,DC=meinefirme,DC=com

Die Werte hinter DC trägst Du dann in den Aufruf ein, also:

<LDAP:
DC=de,DC=int,DC=meinefirme,DC=com>

Den ersten DC= Eintrag lässt Du erst einmal weg, bis Du weist was dort stehen muß.

Gruß

Ralf
AndreasGrothe
AndreasGrothe 25.04.2008 um 08:51:30 Uhr
Goto Top
Hallo ralf,

da ich noch nie etwas damit gemacht habe.
Ich habe jetzt zum auslesen eine Test.vbs Datei erstellt.
Dann habe ich unter c: (mit cmd) die test.vbs aufgerufen. Wo schreibt er die Ausgabe hin?

danke
AndreasGrothe
AndreasGrothe 25.04.2008 um 09:14:43 Uhr
Goto Top
Bekomme folgende Auswertung

LDAP-Name (DN) CN=Grothe,OU=meineFirma,DC=gurex,DC=local
RDiller
RDiller 15.05.2008 um 09:13:56 Uhr
Goto Top
Wenn das was Du geschrieben hast stiommt, sollte der Query so aussehen:

Set rs = ado.Execute("<LDAP://OU=meineFirma,DC=gurex,DC=local>;(&(objectClass=user)(samaccountname=*));ADsPath;SubTree")


Gruß

Ralf