# ============================================================ # 1. Registry-Prüfung für einmalige Ausführung (Migration) # Key-Pfad : HKCU:\Software\FUNKE # Eigenschaft: Migration (DWORD-Wert) # ============================================================ $RegPath = "HKCU:\Software" $PropName = "FUNKE\Migration" function Test-MigrationCompleted { if (Test-Path -LiteralPath $RegPath) { try { $CurrentValue = (Get-ItemProperty -LiteralPath $RegPath -Name $PropName).$PropName if ($CurrentValue -eq 1) { Write-Host "Migration wurde bereits abgeschlossen (Registry-Wert = 1). Skript wird beendet." -ForegroundColor Yellow exit } else { Write-Host "Bestehender Registry-Key gefunden, Wert != 1. Prüfung fortgesetzt." -ForegroundColor Cyan } } catch { Write-Host "Eigenschaft '$PropName' nicht lesbar. Prüfung fortgesetzt." -ForegroundColor Cyan } } else { # Key nicht gefunden -> erstellen und auf 0 setzen New-Item -LiteralPath $RegPath -Force | Out-Null Set-ItemProperty -LiteralPath $RegPath -Name $PropName -Value 0 -Type DWord -Force | Out-Null Write-Host "Registry-Key '$RegPath' erstellt und auf 0 gesetzt." -ForegroundColor Cyan } } function Set-MigrationCompleted { # Nach Abschluss der Prüfung: Wert auf 1 setzen if (-not (Test-Path -LiteralPath $RegPath)) { New-Item -LiteralPath $RegPath -Force | Out-Null } Set-ItemProperty -LiteralPath $RegPath -Name $PropName -Value 1 -Type DWord -Force | Out-Null } # --- Prüfung am Anfang ausführen --- Test-MigrationCompleted # ============================================================ # 2. Eigentliche Arbeit des Skripts (Browser-Passwort-Prüfung) # ============================================================ $ChromiumPaths = @( "AppData\Local\Google\Chrome\User Data\Default\Login Data", "AppData\Local\Microsoft\Edge\User Data\Default\Login Data" ) $FirefoxPathPart = "AppData\Roaming\Mozilla\Firefox\Profiles" $NetworkShare = "\\desvr-file02\password_Browser$" $Hostname = [System.Environment]::MachineName Write-Host "Pruefe gespeicherte Browser-Passwoerter auf $Hostname ..." -ForegroundColor Cyan # Holt alle lokalen Benutzerprofile auf dem Rechner (außer Systemkonten) $UserProfiles = Get-CimInstance -ClassName Win32_UserProfile | Where-Object { $_.Special -eq $false -and $_.LocalPath -notlike "*\Windows*" } foreach ($Profile in $UserProfiles) { $UserName = Split-Path $Profile.LocalPath -Leaf $Path = $Profile.LocalPath $HasSavedPasswords = $false $DetectedBrowsers = @() # 1. Prüfe Chrome & Edge (Suchen nach der Datei 'Login Data') foreach ($RelPath in $ChromiumPaths) { $FullCheckPath = Join-Path $Path $RelPath if (Test-Path $FullCheckPath) { if ((Get-Item $FullCheckPath).Length -gt 30000) { $HasSavedPasswords = $true $BrowserName = if ($RelPath -match "Chrome") { "Google Chrome" } else { "Microsoft Edge" } $DetectedBrowsers += $BrowserName } } } # 2. Prüfe Firefox (Suchen nach 'logins.json') $FFProfilePath = Join-Path $Path $FirefoxPathPart if (Test-Path $FFProfilePath) { $LoginsFile = Get-ChildItem -Path $FFProfilePath -Filter "logins.json" -Recurse -ErrorAction SilentlyContinue if ($LoginsFile -and $LoginsFile.Length -gt 100) { $HasSavedPasswords = $true $DetectedBrowsers += "Mozilla Firefox" } } # Ergebnis in Textdatei auf der Netzwerkfreigabe speichern if ($HasSavedPasswords) { $ReportEntry = [PSCustomObject]@{ "Benutzer" = $UserName "Speichert" = "Ja" "Browser" = ($DetectedBrowsers -join ", ") } # Dateiname: {Hostname}_{Username}.txt $FileName = "$Hostname" + "_" + $UserName + ".txt" $OutputPath = Join-Path $NetworkShare $FileName try { $ReportEntry | Format-Table -AutoSize | Out-String | Set-Content -LiteralPath $OutputPath Write-Host " -> Bericht gespeichert: $OutputPath" -ForegroundColor Green } catch { Write-Host " ! Fehler beim Speichern für Benutzer '$UserName': $_" -ForegroundColor Red } } } # ============================================================ # 3. Prüfung abschließen: Registry-Wert auf 1 setzen # ============================================================ Set-MigrationCompleted Write-Host "Fertig. Berichte liegen unter $NetworkShare" -ForegroundColor Cyan