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.
SHA-256:
3b4cabab8ebeea62b19ec83dff33987aa2182dae3f8fef537044bdc5ab9d7ba4 Code
So sieht die Datei aus, die Sie herunterladen (139 Zeilen). Die Kommentare oben im Skript erklären, was es tut.
<# : 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
}