102 lines
3.8 KiB
PowerShell
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"
|