Netzwerk-Schnellcheck

Findet in Sekunden heraus, wo es hakt: Netzwerkadapter, IP-Adresse und DHCP, WLAN-Signal, Router erreichbar, Internet erreichbar, Namensauflösung (DNS), Proxy. Am Ende steht eine Diagnose in Klartext. Bericht kopieren, speichern oder Test wiederholen. Ändert nichts.

netzwerk-check.cmd 9,1 KB · läuft unter Windows 10/11 · aktualisiert am 17.10.2026 · 0 Downloads

SHA-256: 20931f846b54595de16c233e55429255a7df872473883a058ad56b00bd2b9b07

Code

So sieht die Datei aus, die Sie herunterladen (139 Zeilen). Die Kommentare oben im Skript erklären, was es tut.

netzwerk-check.cmd
<# : Friederich-IT - Netzwerk-Schnellcheck
@echo off
setlocal
chcp 65001 >nul
title Netzwerk-Schnellcheck - Friederich-IT
set "FIT_SELF=%~f0"
powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "iex ([IO.File]::ReadAllText($env:FIT_SELF,[Text.Encoding]::UTF8))"
exit /b %errorlevel%
#>
# ==========================================================================
#  Netzwerk-Schnellcheck                           Version 1.0, Oktober 2026
#  https://friederich-it.de/downloads
#
#  Prüft Schritt für Schritt, wo eine Internetverbindung hakt:
#  Netzwerkkarte -> IP-Adresse -> Router (Gateway) -> Internet -> DNS -> Web.
#  Zeigt WLAN-Daten (SSID, Signal, Kanal), DNS-Server und Proxy und gibt
#  am Ende einen Tipp. Der Bericht lässt sich kopieren - ideal für
#  Support-Anfragen. Ändert nichts am System, keine Administratorrechte.
#  Testziele: Router, 1.1.1.1 (Cloudflare), 9.9.9.9 (Quad9),
#  www.msftconnecttest.com (Verbindungstest von Microsoft).
# ==========================================================================
$ErrorActionPreference = 'SilentlyContinue'
try { [Console]::OutputEncoding = [Text.Encoding]::UTF8 } catch {}
$bericht = New-Object System.Collections.Generic.List[string]
$probleme = New-Object System.Collections.Generic.List[string]
function Out-Titel([string]$t) { Write-Host ''; Write-Host "  $t" -ForegroundColor Cyan; $bericht.Add(''); $bericht.Add("== $t ==") }
function Out-Zeile([string]$k, [string]$v) { Write-Host ('  {0,-22}{1}' -f ($k + ':'), $v); $bericht.Add(('{0,-22}{1}' -f ($k + ':'), $v)) }
function Out-Pruef([string]$k, [bool]$ok, [string]$v) {
    $mark = if ($ok) { '[OK]' } else { '[!!]' }
    Write-Host '  ' -NoNewline; Write-Host $mark -ForegroundColor $(if ($ok) { 'Green' } else { 'Red' }) -NoNewline
    Write-Host (' {0,-19}{1}' -f $k, $v)
    $bericht.Add(('{0} {1,-19}{2}' -f $mark, $k, $v))
}
function Test-Ping([string]$ziel, [int]$anzahl = 3) {
    $p = New-Object System.Net.NetworkInformation.Ping
    $zeiten = @()
    for ($i = 0; $i -lt $anzahl; $i++) {
        try { $r = $p.Send($ziel, 1500); if ($r.Status -eq 'Success') { $zeiten += $r.RoundtripTime } } catch {}
    }
    $verlust = [math]::Round(100 * ($anzahl - $zeiten.Count) / $anzahl)
    if ($zeiten.Count -eq 0) { return @{ ok = $false; text = 'keine Antwort' } }
    $avg = [math]::Round(($zeiten | Measure-Object -Average).Average, 1)
    return @{ ok = $true; text = "$avg ms" + $(if ($verlust -gt 0) { ", $verlust % Verlust" } else { '' }) }
}

Write-Host ''
Write-Host '  Netzwerk-Schnellcheck' -ForegroundColor Cyan
Write-Host '  =====================' -ForegroundColor Cyan
$bericht.Add("Netzwerk-Schnellcheck ($(Get-Date -Format 'dd.MM.yyyy HH:mm'), $env:COMPUTERNAME)")

# 1. Netzwerkkarten
Out-Titel 'Verbundene Netzwerkkarten'
$adapter = @(Get-NetAdapter | Where-Object Status -eq 'Up' | Sort-Object ifIndex)
if ($adapter.Count -eq 0) { Out-Pruef 'Netzwerkkarte' $false 'keine aktive Verbindung (Kabel/WLAN?)'; $probleme.Add('Keine aktive Netzwerkverbindung. Kabel einstecken oder WLAN verbinden, Flugmodus prüfen.') }
foreach ($a in $adapter) { Out-Zeile $a.Name ("{0}, {1}, MAC {2}" -f $a.InterfaceDescription, $a.LinkSpeed, $a.MacAddress) }

# 2. IP-Konfiguration
Out-Titel 'IP-Konfiguration'
$konf = @(Get-NetIPConfiguration | Where-Object { $_.NetAdapter.Status -eq 'Up' })
$gateway = $null
foreach ($k in $konf) {
    $v4 = @($k.IPv4Address | ForEach-Object { "$($_.IPAddress)/$($_.PrefixLength)" })
    $v6 = @($k.IPv6Address | Where-Object { $_.IPAddress -notlike 'fe80*' } | ForEach-Object { $_.IPAddress })
    $dhcp = (Get-NetIPInterface -InterfaceIndex $k.InterfaceIndex -AddressFamily IPv4).Dhcp
    Out-Zeile "$($k.InterfaceAlias) IPv4" ($(if ($v4) { $v4 -join ', ' } else { '–' }) + $(if ($dhcp -eq 'Enabled') { ' (DHCP)' } else { ' (fest eingestellt)' }))
    if ($v6) { Out-Zeile "$($k.InterfaceAlias) IPv6" ($v6 -join ', ') }
    if ($k.IPv4DefaultGateway) { Out-Zeile 'Gateway (Router)' ($k.IPv4DefaultGateway.NextHop -join ', '); if (-not $gateway) { $gateway = @($k.IPv4DefaultGateway.NextHop)[0] } }
    $dns = @($k.DNSServer | Where-Object AddressFamily -eq 2 | ForEach-Object { $_.ServerAddresses }) + @($k.DNSServer | Where-Object AddressFamily -eq 23 | ForEach-Object { $_.ServerAddresses })
    if ($dns) { Out-Zeile 'DNS-Server' (($dns | Select-Object -Unique) -join ', ') }
    if ($v4 -match '^169\.254\.') { $probleme.Add("$($k.InterfaceAlias): Adresse 169.254.x.x – der PC hat vom Router keine IP-Adresse bekommen (DHCP). Router neu starten oder Kabel/WLAN prüfen.") }
}

# 3. WLAN
$wlan = netsh wlan show interfaces 2>$null
if ($wlan -and ($wlan -match '^\s+SSID\s+:')) {
    Out-Titel 'WLAN'
    foreach ($muster in @(@('SSID', '^\s+SSID\s+:\s(.+)$'), @('Signal', '^\s+Signal\s+:\s(.+)$'), @('Kanal', '^\s+(?:Kanal|Channel)\s+:\s(.+)$'), @('Funktyp', '^\s+(?:Funktyp|Radio type)\s+:\s(.+)$'), @('Band', '^\s+Band\s+:\s(.+)$'), @('Empfangsrate', '^\s+(?:Empfangsrate|Receive rate).*:\s(.+)$'), @('Sicherheit', '^\s+(?:Authentifizierung|Authentication)\s+:\s(.+)$'))) {
        $treffer = $wlan | Select-String -Pattern $muster[1] | Select-Object -First 1
        if ($treffer) { Out-Zeile $muster[0] $treffer.Matches[0].Groups[1].Value.Trim() }
    }
    $sig = $wlan | Select-String -Pattern '^\s+Signal\s+:\s(\d+)' | Select-Object -First 1
    if ($sig -and [int]$sig.Matches[0].Groups[1].Value -lt 50) { $probleme.Add('Schwaches WLAN-Signal (unter 50 %). Näher an den Router/Access Point gehen oder 5-GHz/Repeater prüfen.') }
}

# 4. Erreichbarkeit
Out-Titel 'Erreichbarkeit'
$gwOk = $false
if ($gateway) { $r = Test-Ping $gateway; $gwOk = $r.ok; Out-Pruef 'Router' $r.ok "$gateway – $($r.text)" }
else { Out-Pruef 'Router' $false 'kein Gateway eingetragen' }
$r1 = Test-Ping '1.1.1.1'; Out-Pruef 'Internet (1.1.1.1)' $r1.ok $r1.text
$r2 = Test-Ping '9.9.9.9'; Out-Pruef 'Internet (9.9.9.9)' $r2.ok $r2.text
$netOk = $r1.ok -or $r2.ok

$dnsOk = $false
$sw = [Diagnostics.Stopwatch]::StartNew()
try { $ips = [System.Net.Dns]::GetHostAddresses('www.microsoft.com'); $dnsOk = $ips.Count -gt 0 } catch {}
$sw.Stop()
Out-Pruef 'DNS-Auflösung' $dnsOk $(if ($dnsOk) { "www.microsoft.com -> $($ips[0]) ($($sw.ElapsedMilliseconds) ms)" } else { 'fehlgeschlagen' })

$webOk = $false; $webText = 'nicht erreichbar'
try {
    $w = Invoke-WebRequest -Uri 'http://www.msftconnecttest.com/connecttest.txt' -UseBasicParsing -TimeoutSec 8 -MaximumRedirection 0 -ErrorAction Stop
    if ($w.Content -match 'Microsoft Connect Test') { $webOk = $true; $webText = 'Webseiten erreichbar' } else { $webText = 'unerwartete Antwort (Anmeldeseite/Hotspot?)' }
} catch { if ($_.Exception.Response) { $webText = 'Umleitung – vermutlich Hotspot-Anmeldeseite' } }
Out-Pruef 'Web (HTTP)' $webOk $webText

# 5. Proxy
Out-Titel 'Proxy'
$ie = Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings'
$proxy = if ($ie.ProxyEnable -eq 1) { $ie.ProxyServer } else { 'kein Proxy' }
if ($ie.AutoConfigURL) { $proxy += " (Skript: $($ie.AutoConfigURL))" }
Out-Zeile 'Browser/Windows' $proxy
$winhttp = (netsh winhttp show proxy) -join ' '
Out-Zeile 'WinHTTP' $(if ($winhttp -match 'Direkt|Direct') { 'direkt (kein Proxy)' } else { ($winhttp -replace '\s+', ' ').Trim() })

# 6. Auswertung
if (-not $gwOk -and $adapter.Count -gt 0) { $probleme.Add('Der Router antwortet nicht. Router/WLAN-Verbindung prüfen, Router neu starten. (Manche Router beantworten keinen Ping – dann zählt das Ergebnis der Internet-Tests.)') }
if ($gwOk -and -not $netOk) { $probleme.Add('Der Router ist erreichbar, das Internet nicht. Störung beim Internetanbieter oder Router ohne Internetverbindung.') }
if ($netOk -and -not $dnsOk) { $probleme.Add('Internet geht, aber Namen werden nicht aufgelöst (DNS). DNS-Server prüfen, z. B. testweise 1.1.1.1 oder 9.9.9.9 eintragen.') }
if ($netOk -and $dnsOk -and -not $webOk) { $probleme.Add('Internet und DNS gehen, Webseiten nicht. Hotspot-Anmeldung, Proxy, Firewall oder Virenscanner prüfen.') }

Out-Titel 'Ergebnis'
if ($probleme.Count -eq 0) { Write-Host '  Alles in Ordnung - die Internetverbindung funktioniert.' -ForegroundColor Green; $bericht.Add('Alles in Ordnung.') }
else { foreach ($p in $probleme) { Write-Host "  - $p" -ForegroundColor Yellow; $bericht.Add("- $p") } }

Write-Host ''
$text = $bericht -join "`r`n"
while ($true) {
    Write-Host '  [K] Bericht kopieren   [S] auf dem Desktop speichern   [W] wiederholen   [Enter] Beenden' -ForegroundColor DarkGray
    $t = [Console]::ReadKey($true)
    if ($t.Key -eq 'Enter' -or $t.Key -eq 'Escape') { break }
    if ($t.KeyChar -in 'k', 'K') { Set-Clipboard -Value $text; Write-Host '  Bericht kopiert.' -ForegroundColor Green }
    if ($t.KeyChar -in 's', 'S') {
        $datei = Join-Path ([Environment]::GetFolderPath('Desktop')) ('Netzwerk-Check_{0}.txt' -f (Get-Date -Format 'yyyy-MM-dd_HHmm'))
        [IO.File]::WriteAllText($datei, $text, [Text.Encoding]::UTF8); Write-Host "  Gespeichert: $datei" -ForegroundColor Green
    }
    if ($t.KeyChar -in 'w', 'W') { Clear-Host; iex ([IO.File]::ReadAllText($env:FIT_SELF, [Text.Encoding]::UTF8)); exit }
}