Files
WPanda/Scripts/powershell/Drucker_Überwachung_mit_SqlLite_0.2.ps1
2025-12-15 10:00:38 +01:00

102 lines
3.8 KiB
PowerShell

# 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"