# Pobiera listę profili Wi‑Fi i wypisuje na ekran Profile + Password # Nie zapisuje plików, nie używa exportu XML (czyli zwykle nie wymaga Admin) # wzorce do znalezienia linii z hasłem (obsługa PL/EN i drobnych wariantów) $pwPatterns = @( '(?i)^\s*Key Content\s*:\s*(.+)$', '(?i)^\s*Zawartość klucza\s*:\s*(.+)$', '(?i)^\s*Key\s*:\s*(.+)$' ) # pobierz surowe wyjście profili $rawProfiles = netsh wlan show profiles 2>$null if (-not $rawProfiles) { Write-Host "Nie udało się wywołać 'netsh wlan show profiles' lub brak profili." -ForegroundColor Yellow return } # dopasuj nazwy profili (obsługa EN/PL) $profiles = @() foreach ($line in $rawProfiles) { if ($line -match '(?i)(?:all user profile|profile|profil)\s*:\s*(.+)$') { $profiles += $matches[1].Trim() } } $profiles = $profiles | Where-Object { $_ } | Select-Object -Unique if (-not $profiles) { Write-Host "Brak wykrytych profili Wi‑Fi." -ForegroundColor Yellow return } $results = foreach ($p in $profiles) { $out = netsh wlan show profile name="$p" key=clear 2>$null if (-not $out) { [PSCustomObject]@{ Profile = $p; Password = "(no output / error)"; Note = "error" } continue } $pw = $null foreach ($line in $out) { foreach ($pat in $pwPatterns) { if ($line -match $pat) { $val = $matches[1].Trim() if ($val -match '(?i)^(present|obecny)$') { $pw = "(enterprise / stored elsewhere / present)" } else { $pw = $val } break } } if ($pw) { break } } if (-not $pw) { # alternatywna próba znalezienia linii zawierającej 'Key' lub 'Zawartość' $alt = $out | Where-Object { $_ -match '(?i)key|zawartość' } | Select-Object -First 1 if ($alt) { $pw = ($alt -replace '.*:\s*','').Trim() } } if (-not $pw) { $pw = "(brak jawnego hasła / enterprise / wymagane admin)" } [PSCustomObject]@{ Profile = $p; Password = $pw } } # wypisz ładnie na ekran (tabela) $results | Sort-Object Profile | Format-Table -AutoSize