von Zeit zu Zeit muss ich eine Auswertung über das Firmen-AD durchführen. Dabei werden dieverse Gruppenmitgliedschaften, Kontainer, usw. Abgefragt. Eine der Abfragen bezieht sich auch auf die Anzahl der User, die sich seit 180 Tagen nicht mehr angemeldet haben.
Genau diese Abfrage schaffe ich nicht in VBA.
Problem hierbei ist die Kürzung langer Zahlen. Bsp: Gesucht werden alle Accounts deren Anmeldung vor '131118394160000000' liegen. VBA macht daraus '1,311184E+17' und gibt dies auch genau so.
Hat vielleicht jemand den entscheidenen Tipp damit ich den Wald wiederfinde?
Viele Grüße
Jan
Code:
Public Function AllUsers()
Dim Datum As Single
Datum = (CDbl(DateAdd("d", -180, Now)) + 109205) * (8.64 * 10 ^ 11)
OrgaRead Platzhalter"(&(objectClass=User)(!userAccountControl:1.2.840.113556.1.4.803:=2)( _
lastlogontimestamp
Modul:
Public Database
Public Function OrgaRead(Pfad As String, Filter As String, Eigenschaften As String)
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = Pfad & objRootDSE.Get("defaultNamingContext")
strBase = "[LDAP://" & strDNSDomain & "]"
Set adoCommand = CreateObject("ADODB.Command")
Set ADOConnection = CreateObject("ADODB.Connection")
ADOConnection.Provider = "ADsDSOObject"
ADOConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = ADOConnection
'strFilter = "(&(objectClass=" & ObjectTyp & ")" & ADFeld & ");" & What & "; subtree"
strQuery = strBase & ";" & Filter & Eigenschaften & ";subtree"
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 10000
adoCommand.Properties("Timeout") = 30
adoCommand.Properties("Cache Results") = False
'adoCommand.Properties("Sort on") = Sort
Set adoRecordset = adoCommand.Execute
If Not adoRecordset.BOF Then Database = adoRecordset.GetRows
End Function
PS/Zusatzfrage: Wie im Code ersichtlich, Arbeite ich derzeit noch mit Rückgabewerte (Database Array). Dieses Nutze ich, um eine Zählung der Ergebnisse zu erhalten (Bsp: Gruppe A enthält 120 Benutzer). Gibt es hierfür vielleicht einen direkteren Weg?