Windows-11-Kompatibilitätscheck

Prüft die Mindestanforderungen von Windows 11: TPM 2.0, UEFI und Secure Boot, Prozessor, Arbeitsspeicher, Speicherplatz und GPT-Partition – mit Hinweisen, was sich im BIOS/UEFI beheben lässt. Die Prozessorprüfung ist eine Schätzung nach Modellnummer. Fragt nach Administratorrechten, ändert nichts.

windows11-check.cmd 8,4 KB · läuft unter Windows 10/11 · aktualisiert am 17.10.2026 · 1 Downloads

SHA-256: 3b4cabab8ebeea62b19ec83dff33987aa2182dae3f8fef537044bdc5ab9d7ba4

Code

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

windows11-check.cmd
<# : Friederich-IT - Windows-11-Kompatibilitaetscheck
@echo off
setlocal
chcp 65001 >nul
title Windows-11-Check - 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%
#>
# ==========================================================================
#  Windows-11-Kompatibilitätscheck                 Version 1.0, Oktober 2026
#  https://friederich-it.de/downloads
#
#  Prüft die Mindestanforderungen von Windows 11: TPM 2.0, UEFI mit
#  Secure Boot, Prozessor, Arbeitsspeicher, Speicherplatz und GPT-Partition.
#  Die Prozessor-Prüfung ist eine Schätzung nach Modellnummer; im Zweifel
#  gilt die Liste von Microsoft (Link am Ende).
#  Ändert nichts am System. Benötigt Administratorrechte zum Lesen von
#  TPM und Secure Boot (werden beim Start angefordert).
# ==========================================================================
$ErrorActionPreference = 'SilentlyContinue'
try { [Console]::OutputEncoding = [Text.Encoding]::UTF8 } catch {}
$admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $admin) {
    Write-Host '  Administratorrechte werden angefordert (für TPM und Secure Boot) ...'
    try { Start-Process -FilePath $env:FIT_SELF -Verb RunAs -ErrorAction Stop | Out-Null }
    catch { Write-Host '  Abgebrochen: Ohne Administratorrechte lassen sich TPM und Secure Boot nicht prüfen.' -ForegroundColor Yellow; [void][Console]::ReadKey($true) }
    exit
}

$ergebnisse = New-Object System.Collections.Generic.List[object]
function Add-Pruef([string]$name, [string]$status, [string]$wert, [string]$hinweis = '') { $ergebnisse.Add([pscustomobject]@{ Name = $name; Status = $status; Wert = $wert; Hinweis = $hinweis }) }

function Test-Cpu([string]$n) {
    # Rückgabe: 'ok', 'nein' oder '?'  (Schätzung nach Modellname)
    if ($n -match 'Core\(TM\) Ultra|Core Ultra|Snapdragon|Microsoft SQ') { return 'ok' }
    if ($n -match 'Core\(TM\)\s?i[3579]-(\d{4,5})') {
        $nr = $Matches[1]
        $gen = if ($nr.Length -eq 5 -or $nr -match '^1[0-4]') { [int]$nr.Substring(0, 2) } else { [int]$nr.Substring(0, 1) }   # i7-1255U = 12. Gen.
        if ($gen -ge 8) { return 'ok' } else { return 'nein' }
    }
    if ($n -match 'Core\(TM\)\s?[3579]\s') { return 'ok' }           # Core 3/5/7 (ab 2023)
    if ($n -match 'Xeon.*(W-1[0-9]{3}|W-2[2-9]|Gold|Silver|Platinum|Bronze)') { return '?' }
    if ($n -match 'Ryzen\s+(?:PRO\s+)?\d\s+(?:PRO\s+)?(\d)(\d{3})([A-Z]*)') {
        $serie = [int]$Matches[1]; $suffix = $Matches[3]
        if ($serie -ge 3) { return 'ok' }
        if ($serie -eq 2) { if ($suffix -match '^(X?)$') { return 'ok' } else { return 'nein' } }   # 2200G/2500U = Zen 1
        return 'nein'
    }
    if ($n -match 'Ryzen.*\b(AI|Z1)\b') { return 'ok' }
    if ($n -match 'Threadripper\s+(\d)\d{3}') { if ([int]$Matches[1] -ge 2) { return 'ok' } else { return 'nein' } }
    if ($n -match 'Pentium|Celeron|Atom|Athlon|EPYC|Xeon|Intel\(R\) Processor N|\bN[0-9]{2,3}\b') { return '?' }
    return '?'
}

Write-Host ''
Write-Host '  Windows-11-Kompatibilitätscheck' -ForegroundColor Cyan
Write-Host '  ===============================' -ForegroundColor Cyan
Write-Host '  Prüfe ...' -ForegroundColor DarkGray

$os = Get-CimInstance Win32_OperatingSystem
$cs = Get-CimInstance Win32_ComputerSystem
$cpu = @(Get-CimInstance Win32_Processor)[0]

# Firmware und Secure Boot
$fw = $env:firmware_type
if (-not $fw) { $fw = 'unbekannt' }
Add-Pruef 'Firmware (UEFI)' $(if ($fw -eq 'UEFI') { 'ok' } else { 'nein' }) $fw $(if ($fw -ne 'UEFI') { 'Im BIOS auf UEFI umstellen (vorher Datenträger mit MBR2GPT umwandeln).' })
$sb = $null
try { $sb = Confirm-SecureBootUEFI -ErrorAction Stop } catch {}
if ($sb -eq $true) { Add-Pruef 'Secure Boot' 'ok' 'eingeschaltet' }
elseif ($sb -eq $false) { Add-Pruef 'Secure Boot' 'ok' 'möglich, aber ausgeschaltet' 'Reicht für Windows 11; einschalten im UEFI/BIOS wird empfohlen.' }
else { Add-Pruef 'Secure Boot' 'nein' 'nicht verfügbar' 'Nur mit UEFI möglich.' }

# TPM
$tpm = Get-CimInstance -Namespace 'root/cimv2/security/microsofttpm' -ClassName Win32_Tpm
if ($tpm) {
    $ver = ([string]$tpm.SpecVersion -split ',')[0].Trim()
    $an = $tpm.IsEnabled_InitialValue -and $tpm.IsActivated_InitialValue
    $st = if ($ver -like '2.*' -and $an) { 'ok' } elseif ($ver -like '2.*') { 'nein' } else { 'nein' }
    $hin = if ($ver -notlike '2.*') { 'Windows 11 braucht TPM 2.0.' } elseif (-not $an) { 'TPM im UEFI/BIOS aktivieren.' } else { '' }
    Add-Pruef 'TPM' $st ("Version $ver, " + $(if ($an) { 'aktiv' } else { 'nicht aktiv' })) $hin
} else {
    Add-Pruef 'TPM' 'nein' 'nicht gefunden' 'Oft nur im UEFI/BIOS abgeschaltet: Intel "PTT" bzw. AMD "fTPM" einschalten.'
}

# Prozessor
$cpuName = ($cpu.Name -replace '\s+', ' ').Trim()
$cpuSt = Test-Cpu $cpuName
$kerne = [int]$cpu.NumberOfCores
$takt = [math]::Round($cpu.MaxClockSpeed / 1000, 1)
if ($kerne -lt 2 -or $cpu.MaxClockSpeed -lt 1000 -or $cpu.AddressWidth -ne 64) { $cpuSt = 'nein' }
Add-Pruef 'Prozessor' $cpuSt "$cpuName ($kerne Kerne, $takt GHz)" $(switch ($cpuSt) { 'nein' { 'Prozessor steht nicht auf der Liste von Microsoft (Intel ab 8. Generation, AMD ab Ryzen 2000).' } '?' { 'Nicht sicher erkannt – bitte in der Microsoft-Liste nachsehen.' } default { '' } })

# Arbeitsspeicher
$ramGb = [math]::Round($cs.TotalPhysicalMemory / 1GB, 1)
Add-Pruef 'Arbeitsspeicher' $(if ($ramGb -ge 3.7) { 'ok' } else { 'nein' }) "$ramGb GB" $(if ($ramGb -lt 3.7) { 'Mindestens 4 GB nötig.' })

# Speicherplatz und Partitionsstil
$sys = Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='$($env:SystemDrive)'"
$gb = [math]::Round($sys.Size / 1GB)
Add-Pruef 'Systemlaufwerk' $(if ($gb -ge 64) { 'ok' } else { 'nein' }) ("$gb GB, davon {0} GB frei" -f [math]::Round($sys.FreeSpace / 1GB)) $(if ($gb -lt 64) { 'Mindestens 64 GB nötig.' })
$part = Get-Partition -DriveLetter ($env:SystemDrive.TrimEnd(':'))
$disk = if ($part) { Get-Disk -Number $part.DiskNumber } else { $null }
if ($disk) { Add-Pruef 'Partitionsstil' $(if ($disk.PartitionStyle -eq 'GPT') { 'ok' } else { 'nein' }) $disk.PartitionStyle $(if ($disk.PartitionStyle -ne 'GPT') { 'MBR: mit "mbr2gpt /convert" umwandeln (vorher Sicherung!), dann UEFI einschalten.' }) }

# Grafik
$gpu = @(Get-CimInstance Win32_VideoController | ForEach-Object { $_.Name }) -join ', '
Add-Pruef 'Grafik' '?' $gpu 'DirectX 12 / WDDM 2.0 – erfüllen fast alle Grafikchips ab etwa 2015.'

# Ausgabe
Write-Host ''
Write-Host ('  Aktuell installiert: {0} (Build {1})' -f ($os.Caption -replace '^Microsoft\s+', ''), $os.BuildNumber)
Write-Host ''
foreach ($e in $ergebnisse) {
    $mark = switch ($e.Status) { 'ok' { '[OK]' } 'nein' { '[!!]' } default { '[??]' } }
    $farbe = switch ($e.Status) { 'ok' { 'Green' } 'nein' { 'Red' } default { 'Yellow' } }
    Write-Host '  ' -NoNewline; Write-Host $mark -ForegroundColor $farbe -NoNewline
    Write-Host (' {0,-17}{1}' -f $e.Name, $e.Wert)
    if ($e.Hinweis) { Write-Host ('       {0}' -f $e.Hinweis) -ForegroundColor DarkGray }
}
Write-Host ''
$nein = @($ergebnisse | Where-Object Status -eq 'nein').Count
$frag = @($ergebnisse | Where-Object { $_.Status -eq '?' -and $_.Name -ne 'Grafik' }).Count
if ($nein -eq 0 -and $frag -eq 0) { Write-Host '  Ergebnis: Dieser PC erfüllt die Anforderungen von Windows 11.' -ForegroundColor Green }
elseif ($nein -eq 0) { Write-Host '  Ergebnis: Sehr wahrscheinlich geeignet – bitte die mit [??] markierten Punkte prüfen.' -ForegroundColor Yellow }
else { Write-Host "  Ergebnis: $nein Anforderung(en) nicht erfüllt. Manches lässt sich im UEFI/BIOS beheben (siehe Hinweise)." -ForegroundColor Red }
Write-Host ''
Write-Host '  Prozessor-Listen von Microsoft: https://learn.microsoft.com/windows-hardware/design/minimum/windows-processor-requirements' -ForegroundColor DarkGray
Write-Host ''
Write-Host '  [K] Ergebnis kopieren   [Enter] Beenden' -ForegroundColor DarkGray
$t = [Console]::ReadKey($true)
if ($t.KeyChar -in 'k', 'K') {
    $text = "Windows-11-Check $($env:COMPUTERNAME) ($(Get-Date -Format 'dd.MM.yyyy'))`r`n" + (($ergebnisse | ForEach-Object { '{0,-5} {1,-17}{2}' -f $_.Status, $_.Name, $_.Wert }) -join "`r`n")
    Set-Clipboard -Value $text
    Write-Host '  Kopiert.' -ForegroundColor Green
    Start-Sleep -Seconds 1
}