Skript zur Live Logon-Logoff aufzeichnung
Moin Leute,
mein Vorgänger hatte ein Skript welches auf unserm Domaincontroller WinSRV 2016 live die LogOn/LogOff Daten aus dem Eventviewer rausholt, funktionierte bis dato auch immer dass die Daten gekommen sind, im Endeffekt wie ping-t nur mit den User/Timestamp anhand der Event-ID, Skript wird in der ISE geöffnet, bricht aber ohne Fehler ab und die ISE beendet sich ohne Grund, andere Skripte laufen in der ISE ohne Probleme, nur hier happerts:
jetzt will mir dieses Skript nicht mehr starten, ich finde aber keinen offenbaren Fehler, wird als Admin ausgeführt (Powershell ISE) aber die ISE bricht ohne Fehler ab und beendet sich... ich hab jetzt keinen Plan mehr wo hier der Haken ist, bis letzte Woche hats normal seinen Dienst verrichtet, Updates wurden keine Eingespielt...
Bevor jetzt die Diskussion beginnt warum wir hier Live die Daten auswerten, im DV ist dieser Part verankert.
Grüße
mein Vorgänger hatte ein Skript welches auf unserm Domaincontroller WinSRV 2016 live die LogOn/LogOff Daten aus dem Eventviewer rausholt, funktionierte bis dato auch immer dass die Daten gekommen sind, im Endeffekt wie ping-t nur mit den User/Timestamp anhand der Event-ID, Skript wird in der ISE geöffnet, bricht aber ohne Fehler ab und die ISE beendet sich ohne Grund, andere Skripte laufen in der ISE ohne Probleme, nur hier happerts:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Host "Das Skript muss mit Administratorrechten ausgeführt werden." -ForegroundColor Red
exit
}
function Start-LogonLogoffMonitoring {
$logonEventID = 4624
$logoffEventID = 4634
$filterXml = "@"
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventlD=$logonEventID or EventlD=$logoffEventID)]]
</Select>
</Query>
</QueryList>
"@
$events = Get-WinEvent -FilterXml $filterXml -ErrorAction SilentlyContinue
if (!$events) {
Write-Host "Es wurden keine Logon- oder Logoff-Ereignisse gefunden." -ForegroundColor Yellow
return
}
$eventHash = @{}
foreach (event in events) {
eventHash[event.RecordId] = event
}
Write-Host "Starte die Überwachung von Logon- und Logoff-Ereignissen. Drücke [Ctrl+C], um zu beenden."
while ($true) {
$newEvents = Get-WinEvent -FilterXml $filterXml -ErrorAction SilentlyContinue | Where-Object { $_.RecordId -notin $eventHash.Keys }
foreach (event in newEvents) {
$eventHash[event.RecordId] = event
if ($event.Id -eq $logonEventID) {
$eventType = "Logon"
$userName = $event.Properties[5].Value
}
elseif ($event.Id -eq $logoffEventID) {
$eventType = "Logoff"
$userName = $event.Properties[4].Value
}
$timeStamp = event.TimeCreated
$computerName = event.MachineName
Write-Host "[$timeStamp] [$eventType] $userName angemeldet am Computer $computerName"
}
Start-Sleep -Seconds 1
}
}
Start-LogonLogoffMonitoring
jetzt will mir dieses Skript nicht mehr starten, ich finde aber keinen offenbaren Fehler, wird als Admin ausgeführt (Powershell ISE) aber die ISE bricht ohne Fehler ab und beendet sich... ich hab jetzt keinen Plan mehr wo hier der Haken ist, bis letzte Woche hats normal seinen Dienst verrichtet, Updates wurden keine Eingespielt...
Bevor jetzt die Diskussion beginnt warum wir hier Live die Daten auswerten, im DV ist dieser Part verankert.
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7425917771
Url: https://administrator.de/forum/skript-zur-live-logon-logoff-aufzeichnung-7425917771.html
Ausgedruckt am: 01.04.2025 um 20:04 Uhr
3 Kommentare
Neuester Kommentar

Moin.
Zeppel
ich finde aber keinen offenbaren Fehler
Kurz überflogen. Da ist ein Anführungszeichen zu viel in der HereDoc Syntax und diverse Variablen ohne Dollarzeichen, das kann so niemals funktioniert haben 😀$filterXml = "@"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Host "Das Skript muss mit Administratorrechten ausgeführt werden." -ForegroundColor Red
exit
}
function Start-LogonLogoffMonitoring {
$logonEventID = 4624
$logoffEventID = 4634
$filterXml = @"
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventlD=$logonEventID or EventlD=$logoffEventID)]]
</Select>
</Query>
</QueryList>
"@
$events = Get-WinEvent -FilterXml $filterXml -ErrorAction SilentlyContinue
if (!$events) {
Write-Host "Es wurden keine Logon- oder Logoff-Ereignisse gefunden." -ForegroundColor Yellow
return
}
$eventHash = @{}
foreach ($event in $events) {
$eventHash[event.RecordId] = $event
}
Write-Host "Starte die Überwachung von Logon- und Logoff-Ereignissen. Drücke [Ctrl+C], um zu beenden."
while ($true) {
$newEvents = Get-WinEvent -FilterXml $filterXml -ErrorAction SilentlyContinue | Where-Object { $_.RecordId -notin $eventHash.Keys }
foreach ($event in $newEvents) {
$eventHash[event.RecordId] = $event
if ($event.Id -eq $logonEventID) {
$eventType = "Logon"
$userName = $event.Properties[5].Value
}
elseif ($event.Id -eq $logoffEventID) {
$eventType = "Logoff"
$userName = $event.Properties[4].Value
}
$timeStamp = $event.TimeCreated
$computerName = $event.MachineName
Write-Host "[$timeStamp] [$eventType] $userName angemeldet am Computer $computerName"
}
Start-Sleep -Seconds 1
}
}
Start-LogonLogoffMonitoring