# Drucklog_Export.ps1 # Nyomtatási napló beolvasása Event Log-ból, feldolgozása és mentése SQLite adatbázisba duplikációk nélkül # Fontos modul SQLite feldolgozäshoz # Install-Module -Name SQLite -Scope CurrentUser # Import-Module SQLite # --- Beállítások --- $logName = "Microsoft-Windows-PrintService/Operational" $dbPath = "$env:USERPROFILE\Desktop\drucklog_APS-PRINT01.db" # $dbPath = "$env:USERPROFILE\Desktop\drucklog_APS-PRINT02.db" # --- SQLite kapcsolat --- # Add-Type -Path "C:\Tools\SQLite\System.Data.SQLite.dll" $connectionString = "Data Source=$dbPath;Version=3;" $connection = New-Object System.Data.SQLite.SQLiteConnection($connectionString) $connection.Open() # --- Tábla létrehozása, ha nem létezik --- $createTableCmd = $connection.CreateCommand() $createTableCmd.CommandText = @" CREATE TABLE IF NOT EXISTS drucklog ( id INTEGER PRIMARY KEY AUTOINCREMENT, event_id INTEGER UNIQUE, datum TEXT, tag TEXT, woche TEXT, benutzer TEXT, computer TEXT, dokument TEXT, drucker TEXT, seiten INTEGER ); "@ $createTableCmd.ExecuteNonQuery() # --- Események lekérdezése --- $events = Get-WinEvent -LogName $logName -ErrorAction SilentlyContinue | Where-Object { $_.Id -eq 307 } # --- Adatok feldolgozása --- $logList = foreach ($event in $events) { $msg = $event.Message if ($msg -match "im Besitz von (.+?) auf (.+?) wurde auf (.+?) über Port") { $benutzer = $matches[1] $computer = $matches[2] $drucker = $matches[3] } else { continue } $dokument = if ($msg -match "Dokument (.+?), Dokument drucken") { $matches[1] } else { "Unbekannt" } $seiten = if ($msg -match "Gedruckte Seiten: (\d+)") { [int]$matches[1] } else { 0 } $calendar = [System.Globalization.CultureInfo]::CurrentCulture.Calendar $weekRule = [System.Globalization.CalendarWeekRule]::FirstFourDayWeek $firstDay = [System.DayOfWeek]::Monday $woche = $calendar.GetWeekOfYear($event.TimeCreated, $weekRule, $firstDay) [PSCustomObject]@{ Id = $event.RecordId Datum = $event.TimeCreated.ToString("yyyy-MM-dd HH:mm:ss") Tag = $event.TimeCreated.ToString("yyyy-MM-dd") Woche = $woche Benutzer = $benutzer Computer = $computer Dokument = $dokument Drucker = $drucker Seiten = $seiten } } # --- Adatok mentése adatbázisba, duplikáció nélkül --- $ujBejegyzesek = 0 foreach ($row in $logList) { $checkCmd = $connection.CreateCommand() $checkCmd.CommandText = "SELECT COUNT(*) FROM drucklog WHERE event_id = @id" $checkCmd.Parameters.AddWithValue("@id", $row.Id) $exists = $checkCmd.ExecuteScalar() if ($exists -eq 0) { $insertCmd = $connection.CreateCommand() $insertCmd.CommandText = "INSERT INTO drucklog (event_id, datum, tag, woche, benutzer, computer, dokument, drucker, seiten) VALUES (@id, @datum, @tag, @woche, @benutzer, @computer, @dokument, @drucker, @seiten)" $insertCmd.Parameters.AddWithValue("@id", $row.Id) $insertCmd.Parameters.AddWithValue("@datum", $row.Datum) $insertCmd.Parameters.AddWithValue("@tag", $row.Tag) $insertCmd.Parameters.AddWithValue("@woche", $row.Woche) $insertCmd.Parameters.AddWithValue("@benutzer", $row.Benutzer) $insertCmd.Parameters.AddWithValue("@computer", $row.Computer) $insertCmd.Parameters.AddWithValue("@dokument", $row.Dokument) $insertCmd.Parameters.AddWithValue("@drucker", $row.Drucker) $insertCmd.Parameters.AddWithValue("@seiten", $row.Seiten) $insertCmd.ExecuteNonQuery() $ujBejegyzesek++ } } $connection.Close() Write-Host "Sikeresen frissítve: $($logList.Count) esemény feldolgozva." Write-Host "Új bejegyzések az adatbázisban: $ujBejegyzesek"