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:
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 7425917771
Url: https://administrator.de/contentid/7425917771
Printed on: May 5, 2024 at 23:05 o'clock
3 Comments
Latest comment
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 = "@"
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