Skip to content

Daniels Tagesmeldungen

Kleine IT-Episoden, der Diabetes & das wahre Leben

  • Startseite
  • About me

    • Lebenslauf
    • Weiterbildung
  • Diabetes melitus
    • Diabetes melitus – Definition/Typen
    • Diabetes melitus – Podcasts
    • Diabetes Typ-2 – ErlĂ€uterung
    • Medikament – Forxiga (Dapagliflozin)
    • Medikament – Eylea (Aflibercept)
    • Medikament – Lucentis (Ranibizumab )
    • Medikament – Metformin
  • Disclaimer
  • Toggle search form

VBA: LastLogonTimeStamp in Excel-Tabelle

Posted on 18. Juni 201218. Juni 2012 By Daniel Lensing 2 Kommentare zu VBA: LastLogonTimeStamp in Excel-Tabelle

Um eine Auswertung der letzten Anmeldung von Benutzern zu erstellen habe ich das folgende Skript genutzt.

Es können mehrere Anpassungen durchgefĂŒhrt werden:

– DomĂ€ne => dc=domain,dc=local
– Ausschließen von deaktivierten Konten => (!userAccountControl:1.2.840.113556.1.4.803:=2)
– Anpassung der Zeit auf alle Anmeldungen Ă€lter 90 Tage => Format(Now() - 90

Das Skript muss einfach nur aus Excel gestartet werden und man erhĂ€lt eine sehr ĂŒbersichtliche Liste. Es ist allerdings zu beachten, dass der Wert "LastLogonTimeStamp" ein sychnronisierter Wert ist und nicht unbedingt tagesaktuell.

Option Explicit
Const ADS_UF_ACCOUNTDISABLE = 2
Const ADS_SCOPE_SUBTREE = 2
Const ADS_UF_DONT_EXPIRE_PASSWD = 65536
Const FLD_FULLNAME = 1
Const FLD_SAM_ACCTNAME = 2
Const FLD_CREATEDATE = 3
Const FLD_PWD_LASTCHNG = 4
Const FLD_PWD_DONTEXPIRE = 5
Const FLD_UAC = 6
Const FLD_LASTLOGON = 7
Const FLD_ADSPATH = 8
Const FLD_MAX = 8
Const HEADROW = 1
Const ASCII_OFFSET = 64
Sub AD_QUERY()
Dim objUser, objLogon, objConnection, objCommand, objRecordSet
Dim strPath, strFullName, strSamAccountName
Dim intUAC, intLogonTime
Dim createdate, pwdchanged
Dim Disabled, PWDexpire, intCounter
Dim objsheet As Excel.Worksheet
Dim rngData As Excel.Range
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Properties("ADSI Flag") = 1
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 10000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
'Search AD Global catalog for user objects that are not disabled
objCommand.CommandText = "<GC://dc=domain,dc=local>; (&(objectClass=user)(objectCategory=person));adspath, samAccountName; subtree"
Application.StatusBar = "Executing AD Query. Please wait..."
Set objRecordSet = objCommand.Execute
Application.StatusBar = "Populating Worksheet with data. Please wait..."
Set objsheet = Application.ActiveWorkbook.Worksheets.Add()
objsheet.Name = Format(Date, "dd-mm-yyyy") & " Raw Data"
intCounter = 2 'Initialise worksheet row counter
objsheet.Cells(HEADROW, FLD_FULLNAME).Value = "Full Name"
objsheet.Cells(HEADROW, FLD_SAM_ACCTNAME).Value = "SAM Account name"
objsheet.Cells(HEADROW, FLD_CREATEDATE).Value = "Create Date (UTC)"
objsheet.Cells(HEADROW, FLD_PWD_LASTCHNG).Value = "PWD Last Changed"
objsheet.Cells(HEADROW, FLD_PWD_DONTEXPIRE).Value = "PWD Don't Expire"
objsheet.Cells(HEADROW, FLD_UAC).Value = "UAC"
objsheet.Cells(HEADROW, FLD_LASTLOGON).Value = "LastLogonTimestamp"
objsheet.Cells(HEADROW, FLD_ADSPATH).Value = "ADSPATH"
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
  strPath = objRecordSet.Fields("adspath")
'Change the global catalog path to an ldap path so that we can access
'all the attributes when binding to the object.
  strPath = Replace(strPath, "GC://", "LDAP://")
  Set objUser = GetObject(strPath)
  intUAC = objUser.userAccountControl
  If (intUAC And ADS_UF_DONT_EXPIRE_PASSWD) = 0 Then
    PWDexpire = False
  Else
    PWDexpire = True
  End If
  On Error Resume Next
  Err.Clear
  'Set objLogon = objUser.LastLogonTimestamp
  Set objLogon = objUser.LastLogon
  If Err.Number <> 0 Then
    intLogonTime = 0
    Err.Clear
  Else
    intLogonTime = objLogon.HighPart * (2 ^ 32) + objLogon.LowPart
    intLogonTime = intLogonTime / (60 * 10000000)
    intLogonTime = intLogonTime / 1440
  End If
  strFullName = objUser.FullName
  If Err.Number <> 0 Then
    strFullName = ""
    Err.Clear
  End If
  createdate = objUser.whenCreated
  If Err.Number <> 0 Then
    createdate = ""
    Err.Clear
  End If
  pwdchanged = objUser.passwordLastChanged
  If Err.Number <> 0 Then
    pwdchanged = ""
    Err.Clear
  End If
  On Error GoTo 0
  strSamAccountName = objUser.SamAccountName
  objsheet.Cells(intCounter, FLD_FULLNAME).Value = strFullName
  objsheet.Cells(intCounter, FLD_SAM_ACCTNAME).Value = strSamAccountName
  objsheet.Cells(intCounter, FLD_CREATEDATE).Value = createdate
  objsheet.Cells(intCounter, FLD_PWD_LASTCHNG).Value = pwdchanged
  objsheet.Cells(intCounter, FLD_PWD_DONTEXPIRE).Value = PWDexpire
  objsheet.Cells(intCounter, FLD_UAC).Value = intUAC
  If intLogonTime <> 0 Then
    objsheet.Cells(intCounter, FLD_LASTLOGON).Value = intLogonTime + #1/1/1601#
  Else
    objsheet.Cells(intCounter, FLD_LASTLOGON).Value = "#1/1/1601#"
  End If
  objsheet.Cells(intCounter, FLD_ADSPATH).Value = strPath
  objRecordSet.MoveNext
  intCounter = intCounter + 1
Loop
Set rngData = objsheet.Range("A1:" & Chr(ASCII_OFFSET + FLD_MAX) & intCounter - 1)
'if the named range already exists we need to delete is before we create it again.
'This will allow more than one audit set to be retained in the same workbook.
On Error Resume Next
ActiveWorkbook.Names("AD_DATA_SET").Delete
On Error GoTo 0
rngData.Name = "AD_DATA_SET"
rngData.Columns.AutoFit
Application.StatusBar = "Ready"
End Sub
 
Sub filter_lastlogon()
Dim rngData As Excel.Range
Set rngData = Range("AD_DATA_SET")
rngData.Worksheet.AutoFilterMode = False
'Filter function seems to ignore locale info so dates must be in US format
rngData.AutoFilter Field:=FLD_LASTLOGON, Criteria1:="=#1/1/1601#", Operator:=xlOr, _
  Criteria2:="<" & Format(Now() - 90, "mm/dd/yyyy")
End Sub
 
Sub filter_pwd_dontexpire()
Dim rngData As Excel.Range
Set rngData = Range("AD_DATA_SET")
rngData.Worksheet.AutoFilterMode = False
rngData.AutoFilter Field:=FLD_PWD_DONTEXPIRE, Criteria1:="=True"
End Sub
 
Sub RemoveFilter()
Dim rngData As Excel.Range
Set rngData = Range("AD_DATA_SET")
rngData.Worksheet.AutoFilterMode = False
End Sub
 
Sub CopyPW()
'Copies the filtered data to a new Worksheet
'Code modified from http://www.contextures.com/xlautofilter03.html#Copy
'Viewed 7/6/2007
Dim rngData As Excel.Range
Dim rng As Range
Dim rng2 As Range
Dim objsheet As Worksheet
Set rngData = Range("AD_DATA_SET")
Call filter_pwd_dontexpire
If Not rngData.Worksheet.FilterMode Then
  MsgBox "Filter Data before selecting this option", vbExclamation
  Exit Sub
End If
With rngData.Worksheet.AutoFilter.Range
  On Error Resume Next
  Set rng2 = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _
    .SpecialCells(xlCellTypeVisible)
  On Error GoTo 0
End With
If rng2 Is Nothing Then
    MsgBox "No data to copy"
Else
  Set objsheet = Application.ActiveWorkbook.Worksheets.Add()
  objsheet.Name = Format(Date, "dd-mm-yyyy") & " Password dont expire"
  Set rng = rngData.Worksheet.AutoFilter.Range
  rng.Offset(1, 0).Resize(rng.Rows.Count - 1).Copy _
    Destination:=objsheet.Range("A2")
  objsheet.Cells(HEADROW, FLD_FULLNAME).Value = "Full Name"
  objsheet.Cells(HEADROW, FLD_SAM_ACCTNAME).Value = "SAM Account name"
  objsheet.Cells(HEADROW, FLD_CREATEDATE).Value = "Create Date (UTC)"
  objsheet.Cells(HEADROW, FLD_PWD_LASTCHNG).Value = "PWD Last Changed"
  objsheet.Cells(HEADROW, FLD_PWD_DONTEXPIRE).Value = "PWD Don't Expire"
  objsheet.Cells(HEADROW, FLD_UAC).Value = "UAC"
  objsheet.Cells(HEADROW, FLD_LASTLOGON).Value = "LastLogonTimestamp"
  objsheet.Cells(HEADROW, FLD_ADSPATH).Value = "ADSPATH"
  objsheet.Columns.AutoFit
End If
End Sub
 
Sub CopyLstLogon()
'Copies the filtered data to a new Worksheet
'Code modified from http://www.contextures.com/xlautofilter03.html#Copy
'Viewed 7/6/2007
Dim rngData As Excel.Range
Dim rng As Range
Dim rng2 As Range
Dim objsheet As Worksheet
Set rngData = Range("AD_DATA_SET")
Call filter_lastlogon
If Not rngData.Worksheet.FilterMode Then
  MsgBox "Filter Data before selecting this option", vbExclamation
  Exit Sub
End If
With rngData.Worksheet.AutoFilter.Range
  On Error Resume Next
  Set rng2 = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _
    .SpecialCells(xlCellTypeVisible)
  On Error GoTo 0
End With
If rng2 Is Nothing Then
  MsgBox "No data to copy"
Else
  Set objsheet = Application.ActiveWorkbook.Worksheets.Add()
  objsheet.Name = Format(Date, "dd-mm-yyyy") & " LastLogon > 90 days"
  Set rng = rngData.Worksheet.AutoFilter.Range
  rng.Offset(1, 0).Resize(rng.Rows.Count - 1).Copy _
    Destination:=objsheet.Range("A2")
  objsheet.Cells(HEADROW, FLD_FULLNAME).Value = "Full Name"
  objsheet.Cells(HEADROW, FLD_SAM_ACCTNAME).Value = "SAM Account name"
  objsheet.Cells(HEADROW, FLD_CREATEDATE).Value = "Create Date (UTC)"
  objsheet.Cells(HEADROW, FLD_PWD_LASTCHNG).Value = "PWD Last Changed"
  objsheet.Cells(HEADROW, FLD_PWD_DONTEXPIRE).Value = "PWD Don't Expire"
  objsheet.Cells(HEADROW, FLD_UAC).Value = "UAC"
  objsheet.Cells(HEADROW, FLD_LASTLOGON).Value = "LastLogonTimestamp"
  objsheet.Cells(HEADROW, FLD_ADSPATH).Value = "ADSPATH"
  objsheet.Columns.AutoFit
End If
End Sub

Als Gundlage wurde das Skript von der folgenden Seite eingesetzt:
Link

VBA

Remedy: Datumsabfrage fĂŒr den laufenden Tag

Posted on 14. Juni 201220. Juni 2012 By Daniel Lensing Keine Kommentare zu Remedy: Datumsabfrage fĂŒr den laufenden Tag

Einige meiner Kunden nutzen unter anderem als Ticketsystem Remedy. Entsprechend mĂŒssen auch Abfragen und Berichte erstellt werden.

Man kann bei Remedy ĂŒber die $-Zeichen in Makros Eingabeaufforderungen erstellen, so dass Makros individuell abgefragt werden können. In dem von mit bearbeiteten Fall musste eine Tagesgenaue Auswertung zwischen einem definierten Zeitraum erstellt werden. somit baute ich die folgende Abfrage ins ein Makro:

(‚FELD‘ > „$Von-Datum im Format 01.01.2012$“ AND ‚FELD‘ < „$Bis-Datum im Format 01.01.2012$“)

Wenn nun als „Bis-Datum“ das heutige  Tag eingegeben wurde, erschienen allerdings nicht die Daten des aktuellen Tages. In der Abfrage wird durch den Eintrag des Datums folgender Zeitstempel als gegeben angenommen:

01.01.2012 00:00:00

Somit konnte auch keine Daten ermittelt werden, da diese gar nicht gesucht wurden. Um jetzt allerdings nicht auch noch eine genauere Eingabe mit Uhrzeit durchfĂŒhren zu mĂŒssen, habe ich die Abfrage nur ein wenig erweitert:

(‚FELD‘ > „$Von-Datum im Format 01.01.2012$“ AND ‚FELD‘ < („$Bis-Datum im Format 01.01.2012$“ + (24*60*60)))

Entsprechend werden zu einem aktuellen Tag ein weiterer Tag hinzugerechnet. Das bedeutet das bei der Eingabe des „01.01.2012“ der Zeitstempel auf „02.01.2012 00:00:00“ genutzt wird. Damit werden auch alles Daten des 01.01.2012 ermittelt und zur VerfĂŒgung gestellt.

Software

acctinfo.dll bei einem 64-Bit-System

Posted on 11. Juni 201227. Mai 2024 By Daniel Lensing Keine Kommentare zu acctinfo.dll bei einem 64-Bit-System

Bei 32-Bit-Systemen habe ich die acctinfo.dll schon hÀufiger genutzt, um zum Beispiel das Passwort-Ablaufdatum oder auch die SID eines Benutzers zu ermitteln. Heute wurde ich allerdings angesprochen, wie das Tool unter einem Windows 7-System, welches auf der 64-Bit-Technologie basiert, eingesetzt werden kann.

Die Dll ist Bestandteil eines Tool-Packs „Account Lockout and Management Tools“, welches unter dem folgenden Link heruntergeladen werden kann.

Download

Nach dem Entpacken sollte die DLL sowie die Datei „lockoutstatus.exe“ in den folgenden Pfad kopiert werden:

%SystemRoot%\SysWOW64\

Anschließend muss der folgende Befehl mit administrativen Rechten ausgefĂŒhrt werden, um die DLL in das System zu importieren:

regsvr32.exe %SystemRoot%\SysWOW64\acctinfo.dll 

Wenn man nun die Konsole des SnapIns „Active Directory Benutzer und Computer“ öffnet, erhĂ€lt man bei den direktem Benutzerobjekt trotzdem nicht die zusĂ€tzliche Registerkarte.

HierfĂŒr muss eine Konsole in einer 32-Bit-Umgebung gestartet werden. Dieses kann entweder durch das Öffnen der Manangment Konsole im 32-Bit-Kontext und dem Einbinden des SnapIns durch den folgendne Befehl:

mmc.exe -32

Ein weiterer Weg ist der Aufruf des direkten SnapIns; ebenfalls im 32-Bit-Kontext:

dsa.msc -32

Eine weitere und nicht unwerwĂ€hnte Möglichkeit ist die entsprechende Erweiterung fĂŒr 64-Bit-Systeme zu nutzen, die unter dem Dateinamen „acctinfo2.dll“ auch in einer 64-Bit-Version erhĂ€ltlich ist. Diese ist allerdings nicht seitens Microsoft supportet.

Des Weiteren ist darauf hinzuweisen, dass der zusĂ€tzliche Reiter nur erscheint, wenn man direkt das Objekt aus dem Objektbaum öffnet und nicht ĂŒber die auch im SnapIn implementierte Suche aufruft.  

Windows 7

ice:2012 – Anmeldung ab 01.07.2012

Posted on 31. Mai 201231. Mai 2012 By Daniel Lensing Keine Kommentare zu ice:2012 – Anmeldung ab 01.07.2012

Im Gegensatz zu den vergangenen Jahren wird in diesem Jahr die Anmeldung zur IT-Community-Veranstaltung ice:2012 in Lingen erst am 01.07.2012 freigeschaltet. Die Veranstaltung ist mit 300 verfĂŒgbaren PlĂ€tzen limitiert.

Link

Von Nils Kaczenski wurde auch dieses Jahr wieder ein Countdown-Gadget erstellt und auf seiner Webseite veröffentlicht.

Link

IT-Nachrichten

Wecker fĂŒr Windows – Free Alarm Clock

Posted on 21. Mai 201221. Mai 2012 By Daniel Lensing 1 Kommentar zu Wecker fĂŒr Windows – Free Alarm Clock

Es gibt Momente im Leben, wo man einen Wecker benötigt. Jetzt werden viele denken: Das kann mein Handy auch. Allerdings gibt es in meinem Arbeitsalltag auch Situationen, wo ich mein Handy nicht einsetzen möchte.

FĂŒr diesen Zweck nutze ich seit lĂ€ngerem “Free Alarm Clock”. Dieses Programm reaktiviert auch meinen Rechner aus dem Standby und aktiviert, falls dieser ausgeschaltet wurde, den Lautsprecher.

Sogar aus der Funktion des “Ruhezustands” und “Energie sparen” weckt das Tool den Rechner auf. Ist der Rechner gesperrt oder der Benutzer, wie bei DomĂ€nenbenutzern, gar mit einem Passwort geschĂŒtzt, muss der Rechner erst wieder freigegeben werden, damit der Wecker abgeschaltet werden kann.

Link

Software

0x80040201 bei DLL-Registrierung fĂŒr AD-Schema-SnapIn

Posted on 3. Mai 20123. Mai 2012 By Daniel Lensing Keine Kommentare zu 0x80040201 bei DLL-Registrierung fĂŒr AD-Schema-SnapIn

Am gestrigen Tage erhielt ich eine Anfrage aufgrund meines Artikels zum Active Directory-Schema und der Installation des entsprechenden SnapIns per DLL-Registrierung. Der Anfragende bekam immer die Fehlermeldung „The Module schmmgmt.dll Loaded but the Call to DllRegisterServer Failed with Error Code 0x80040201“.

Er hatte auch seinem Benutzer die höchstmöglichen Active-Directory-Rechte eingerĂ€umt, was allerdings den Fehler nicht beseitigte. Das Hinderniss um den Befehl erfolgreich auszufĂŒhren war die UAC, die bei Windows Server 2008 R2 genauso aktiviert ist wie bei den Clientbetriebssystemen.

Nachdem der Fragende den Befehl „regsvr32 schmmgmt.dll“ in einem Konsolenfenster mit administrativer Berechtigung ausgefĂŒhrt hatte bekam er von dem System eine Erfolgreiche RĂŒckmeldung und konnte auch das SnapIn nutzen.

Windows Server

„Administrative Tools“ aus Programme und StartmenĂŒ entfernen

Posted on 19. April 201219. April 2012 By Daniel Lensing Keine Kommentare zu „Administrative Tools“ aus Programme und StartmenĂŒ entfernen

Nach der Installation der „Remote Server Administration Tools“, die zum Beispiel fĂŒr die Verwaltung einer Active Directory oder zum Erstellen von Gruppenrichtlinien verwandt wird, erscheinen diese als Programmgruppe unter dem Punkt „Alle Programme“ sowie als Unterpunkt im „StartmenĂŒ“.

Dieses kann per Registry-Key getrennt voneinander ausgeblendet werden.

Eintrag „Administrative Tools“ im StartmenĂŒ verbergen:

Pfad: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
Objekt: StartMenuAdminTools
Objekttyp: DWORD
Value: 0

Programmgruppe unter „Alle Programme“ verbergen:

Pfad: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
Objekt: Start_AdminToolsRoot
Objekttyp: DWORD
Value: 0

Der generellte Zugriff auf die eingebundenen Management-Konsolen ist weiterhin möglich und wird durch diese Registrywerte nicht beeintrÀchtigt.

Windows 7, Windows Server

Seitennummerierung der BeitrÀge

Vorherige 1 … 75 76 77 … 152 NĂ€chste

Daniel Lensing

Ich betreibe diesen Blog, bei dem ich meine Erfahrungen aus der IT & dem Berufsalltag sowie dem Wahnsinn des Lebens mit Höhen und Tiefen. Darunter meine „Erlebnisreise“ zum Planeten „Diabetes mellitus Typ-2“.

Translate:

Follow us

Kategorien

  • Allgemein (1)
  • Client (234)
    • Android (7)
    • Fedora (Linux) (5)
    • iOS (5)
    • Mac OS X (5)
    • Peripherie (5)
    • Ubuntu (Linux) (8)
    • Windows 10 (59)
    • Windows 11 (20)
    • Windows 7 (100)
    • Windows 8 (36)
    • Windows 8.1 (28)
    • Windows Mobile (2)
    • Windows Vista (65)
    • Windows XP (21)
  • Cloud (15)
    • Amazon AWS (1)
    • Microsoft Azure (7)
    • Office 365 (9)
  • Fortbewegung (57)
    • Auto (18)
    • Bahn (18)
    • Beinarbeit (6)
    • Flugzeug (4)
    • Zweirad (14)
  • IT-Nachrichten (37)
  • Leben Beruf und Gesundheit (199)
    • #t2dhero (50)
    • Arbeitszimmer (28)
    • Audio (20)
    • Film / Kino (7)
    • Gedanken (78)
    • Gesundheit (31)
    • Internet (5)
    • Lebensmittel & Essen (22)
    • Lesestoff (18)
    • Sport (11)
    • Veranstaltung (3)
  • Lehren & Lernen (48)
    • Forschung (1)
    • Konferenzen (3)
    • PrĂ€sentation (3)
    • Zertifizierung (42)
  • Programme (322)
    • Android-Apps (27)
    • Eigene Tools (11)
    • iOS-Apps (6)
    • Office (86)
    • Patchday+Updates (73)
    • Software (149)
    • Spiele (3)
    • Windows Phone-Apps (2)
  • Programmierung (90)
    • AutoIT (1)
    • KiXtart (1)
    • PHP (3)
    • Power Automate (1)
    • Powershell (59)
    • VB.NET (8)
    • VBA (10)
    • VBS (10)
  • Server (159)
    • Citrix XenServer (2)
    • Exchange Server (26)
    • Lync Server (1)
    • System Center (4)
    • Ubuntu Server (2)
    • Windows Home Server (2)
    • Windows Server (92)
    • Windows Server 2012 (45)
    • Windows Server 2016 (15)
    • Windows Server 2019 (18)
    • Windows Server 2022 (15)
    • Windows Server 2025 (8)
  • Telekommunikation (38)
    • Festnetz (3)
    • Internet (13)
    • Mobilfunk (23)
  • Verkauf & Verlosung (1)
  • Web-Installationen (36)
    • Joomla (4)
    • Mastodon (1)
    • MediaWiki (9)
    • phpMyAdmin (2)
    • Piwik (4)
    • Wordpress (20)
Mastodon

Copyright © 2025 Daniels Tagesmeldungen.

Powered by PressBook WordPress theme