Last Logon Script - inaktive Benutzer ausfindig machen

Mitglied: pyccku

pyccku (Level 1) - Jetzt verbinden

30.04.2010 um 11:42 Uhr, 3663 Aufrufe

Hallo Leute,

ich hab hier ein Script gefunden, dass alle Benutzer einer Domäne auflistet und zusätzlich noch anzeigt wann sich der Benutzer zuletzt angemeldet hat.

Nun würde ich das Script so modifizieren, dass ich nur die Benutzer angezeigt kriege, die sich:

- noch nie angemeldet haben

oder

- in den letzten 6 Monaten nicht angemeldet haben.


Was muss ich an dem Script modifizieren? Wäre für eure Hilfe sehr dankbar.


Option Explicit

Dim objRootDSE, strConfig, adoConnection, adoCommand, strQuery
Dim adoRecordset, objDC
Dim strDNSDomain, objShell, lngBiasKey, lngBias, k, arrstrDCs()
Dim strDN, dtmDate, objDate, objList, strUser
Dim strBase, strFilter, strAttributes, lngHigh, lngLow

' Use a dictionary object to track latest lastLogon for each user.
Set objList = CreateObject("Scripting.Dictionary")
objList.CompareMode = vbTextCompare

' Obtain local Time Zone bias from machine registry.
' This bias changes with Daylight Savings Time.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _
& "TimeZoneInformation\ActiveTimeBias")
If (UCase(TypeName(lngBiasKey)) = "LONG") Then
lngBias = lngBiasKey
ElseIf (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then
lngBias = 0
For k = 0 To UBound(lngBiasKey)
lngBias = lngBias + (lngBiasKey(k) * 256^k)
Next
End If

' Determine configuration context and DNS domain from RootDSE object.
Set objRootDSE = GetObject("LDAP://RootDSE")
strConfig = objRootDSE.Get("configurationNamingContext")
strDNSDomain = objRootDSE.Get("defaultNamingContext")

' Use ADO to search Active Directory for ObjectClass nTDSDSA.
' This will identify all Domain Controllers.
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = adoConnection

strBase = "<LDAP://" & strConfig & ">"
strFilter = "(objectClass=nTDSDSA)"
strAttributes = "AdsPath"
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"

adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 100
adoCommand.Properties("Timeout") = 60
adoCommand.Properties("Cache Results") = False

Set adoRecordset = adoCommand.Execute

' Enumerate parent objects of class nTDSDSA. Save Domain Controller
' AdsPaths in dynamic array arrstrDCs.
k = 0
Do Until adoRecordset.EOF
Set objDC = _
GetObject(GetObject(adoRecordset.Fields("AdsPath").Value).Parent)
ReDim Preserve arrstrDCs(k)
arrstrDCs(k) = objDC.DNSHostName
k = k + 1
adoRecordset.MoveNext
Loop
adoRecordset.Close

' Retrieve lastLogon attribute for each user on each Domain Controller.
For k = 0 To Ubound(arrstrDCs)
strBase = "<LDAP://" & arrstrDCs(k) & "/" & strDNSDomain & ">"
strFilter = "(&(objectCategory=person)(objectClass=user))"
strAttributes = "distinguishedName,lastLogon"
strQuery = strBase & ";" & strFilter & ";" & strAttributes _
& ";subtree"
adoCommand.CommandText = strQuery
On Error Resume Next
Set adoRecordset = adoCommand.Execute
If (Err.Number <> 0) Then
On Error GoTo 0
Wscript.Echo "Domain Controller not available: " & arrstrDCs(k)
Else
On Error GoTo 0
Do Until adoRecordset.EOF
strDN = adoRecordset.Fields("distinguishedName").Value
On Error Resume Next
Set objDate = adoRecordset.Fields("lastLogon").Value
If (Err.Number <> 0) Then
On Error GoTo 0
dtmDate = #1/1/1601#
Else
On Error GoTo 0
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
If (lngLow < 0) Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0) Then
dtmDate = #1/1/1601#
Else
dtmDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow)/600000000 - lngBias)/1440
End If
End If
If (objList.Exists(strDN) = True) Then
If (dtmDate > objList(strDN)) Then
objList.Item(strDN) = dtmDate
End If
Else
objList.Add strDN, dtmDate
End If
adoRecordset.MoveNext
Loop
adoRecordset.Close
End If
Next

' Output latest lastLogon date for each user.
For Each strUser In objList.Keys
If (objList.Item(strUser) = #1/1/1601#) Then
Wscript.Echo strUser & ";Never"
Else
Wscript.Echo strUser & ";" & objList.Item(strUser)
End If
Next

' Clean up.
adoConnection.Close
Set objRootDSE = Nothing
Set adoConnection = Nothing
Set adoCommand = Nothing
Set adoRecordset = Nothing
Set objDC = Nothing
Set objDate = Nothing
Set objList = Nothing
Set objShell = Nothing
Heiß diskutierte Inhalte
Benchmarks
M.2 SSD und RAM zu langsam
gelöst MarkowitschFrageBenchmarks14 Kommentare

Hallo zusammen, ich habe mir folgenden PC zusammengestellt : MB: ASUS - ROG Strix Z490-E Gaming Mainboard (90MB12P0-M0EAY0) CPU: ...

Peripheriegeräte
Suchen Outdoor Wandler von LWL auf Cat 7 Kabel
pavelruFragePeripheriegeräte13 Kommentare

Hallo Zusammen, wir suchen einen Outdoor Konverter welcher von einem kommenden LWL Kabel auf CAT 7 Lan Kabel weiter ...

Netzwerkgrundlagen
Verständnisfrage zu Switchen in einem Netzwerk
kaloschkeFrageNetzwerkgrundlagen13 Kommentare

Hallo, nur interessehalber: Ich habe in meinem Heimnetzwerk einen Smarthomecontroller (Innogy) an einem Switch und einen Raspberry Pi mit ...

Festplatten, SSD, Raid
Synology NAS SHR auflösen
chkdskFrageFestplatten, SSD, Raid12 Kommentare

Mahlzeit zusammen, ich hab schon ein bisschen recherchiert, allerdings keine "aktuelle" Information gefunden. Kurz zu meinem Problem: Ich habe ...

Festplatten, SSD, Raid
NAS einrichten statt Bandlaufwerk
gelöst ingo1988FrageFestplatten, SSD, Raid11 Kommentare

Hallo, ich brauche einmal eine Beratung für eine Datensicherung. Im Moment findet die Datensicherung über ein NAS mit 5 ...

Batch & Shell
Script zum festellen welche datein noch ganz sind
ricardobohnerFrageBatch & Shell10 Kommentare

Hallo Leute, Ich hab da ne frage: Kann man per script feststellen ob eine Datein noch 100% ist? Zum ...

Ähnliche Inhalte
Batch & Shell
Last Logon Datum per Powershell abrufen
gelöst DerWoWussteFrageBatch & Shell12 Kommentare

Moin Kollegen. Wer ist vor 10 schon so fit, mir Folgendes zu erklären: Das zum Titel passende Skript ist ...

Windows 7
Logon Script - Bitlocker
gelöst FlashLightzFrageWindows 75 Kommentare

Hallo zusammen, habt Ihr zufällig eine Idee, wie Ihr es realisieren würdet um bei jedem Start von "Windows 7 ...

Windows 10
Windows 10 Powershell Logon Script
derhoeppiFrageWindows 109 Kommentare

Hallo, ich habe ein einfaches Powershell Script das ich via GPO oder Scheduled Task ausführen möchte. In dem Script ...

Batch & Shell

Office Vorlagen via Logon Script verteilen

gelöst arduinoFrageBatch & Shell4 Kommentare

Hallo Admin Gemeinde Ich habe folgende Challenge :) 1. File C:\Test\Vorlage.dotm Modify Datum auslesen 2. Reg Key \HKEY_CURRENT_USER\SOFTWARE\ZRZ\Windows\WordTemplateModify auslesen ...

Windows Userverwaltung

Logon Script mit einer .reg Datei

gelöst KathakiFrageWindows Userverwaltung7 Kommentare

Hallo ihr Lieben, wir haben die letzten Wochen genutzt und sind mit unserem Terminalserver auf Windows Server 2012 R2 ...

Windows Netzwerk

Automatierte Logon Script Ausführung bei einer Domänenverbindung

gelöst AlienatedFrageWindows Netzwerk2 Kommentare

Folgendes versuche ich zu erreichen: Benutzer meldet sich per VPN an: unmittelbar nach dem VPN Verbindungsaufbau soll das Logon ...

Neue Fragen
Administrator Magazin
11 | 2020 Virtualisierung ist aus der IT nicht mehr wegzudenken. In der November-Ausgabe des IT-Administrator Magazins dreht sich der Schwerpunkt um das Thema "Server- und Storage-Virtualisierung". Darin erfahren Sie, wie sich die Virtualisierungstechnologie entwickelt hat, welche Varianten es im Bereich Server und Speicher gibt und wie ...
Neue Beiträge
Neue Jobangebote
Server- und Storage-VirtualisierungServer- und Storage-VirtualisierungBerechtigungs- und IdentitätsmanagementBerechtigungs- und IdentitätsmanagementWebdienste und -serverWebdienste und -serverDatenbankenDatenbankenMonitoring & SupportMonitoring & SupportHybrid CloudHybrid Cloud