System-Steckbrief (Hardware-Übersicht)
Alles über den PC auf einen Blick: Hersteller, Modell, Seriennummer, BIOS, Prozessor, RAM-Riegel und freie Steckplätze, Datenträger mit Zustand, Grafik, Netzwerk (MAC/IP) und Akku-Verschleiß. Ideal für Inventar, Support-Anfragen oder vor dem Verkauf. Kopieren oder als Textdatei speichern. Keine Administratorrechte nötig.
SHA-256:
8f469d2da275c00060b2393b09ce36c4a1050eeb59f9a582618cd16251fda126 Code
So sieht die Datei aus, die Sie herunterladen (124 Zeilen). Die Kommentare oben im Skript erklären, was es tut.
<# : Friederich-IT - System-Steckbrief
@echo off
setlocal
chcp 65001 >nul
title System-Steckbrief - 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%
#>
# ==========================================================================
# System-Steckbrief Version 1.0, Oktober 2026
# https://friederich-it.de/downloads
#
# Alles Wichtige über diesen PC auf einen Blick: Hersteller, Modell,
# Seriennummer, BIOS, Prozessor, Arbeitsspeicher (Riegel), Datenträger mit
# Zustand, Laufwerke, Grafik, Netzwerk und Akku. Ideal für Inventar,
# Support-Anfragen oder vor dem Verkauf. Bericht kopieren oder speichern.
# Ändert nichts am System, keine Administratorrechte nötig.
# ==========================================================================
$ErrorActionPreference = 'SilentlyContinue'
try { [Console]::OutputEncoding = [Text.Encoding]::UTF8 } catch {}
$bericht = 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, $v) { if ($null -eq $v -or "$v".Trim() -eq '') { return }; Write-Host (' {0,-20}{1}' -f ($k + ':'), $v); $bericht.Add(('{0,-20}{1}' -f ($k + ':'), $v)) }
function Format-GB([double]$b) { if ($b -ge 1TB) { '{0:N1} TB' -f ($b / 1TB) } else { '{0:N0} GB' -f ($b / 1GB) } }
Write-Host ''
Write-Host ' System-Steckbrief' -ForegroundColor Cyan
Write-Host ' =================' -ForegroundColor Cyan
Write-Host ' Daten werden gesammelt ...' -ForegroundColor DarkGray
$bericht.Add("System-Steckbrief $env:COMPUTERNAME ($(Get-Date -Format 'dd.MM.yyyy HH:mm'))")
$cs = Get-CimInstance Win32_ComputerSystem
$csp = Get-CimInstance Win32_ComputerSystemProduct
$bios = Get-CimInstance Win32_BIOS
$bb = Get-CimInstance Win32_BaseBoard
$os = Get-CimInstance Win32_OperatingSystem
$cv = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
Out-Titel 'Gerät'
Out-Zeile 'Computername' $env:COMPUTERNAME
Out-Zeile 'Hersteller' $cs.Manufacturer
Out-Zeile 'Modell' $(if ($csp.Version -and $csp.Version -notmatch 'System Version|To be filled|None') { "$($cs.Model) ($($csp.Version))" } else { $cs.Model })
Out-Zeile 'Seriennummer' $(if ($bios.SerialNumber -notmatch 'To be filled|Default|System Serial|^0+$') { $bios.SerialNumber } else { 'nicht hinterlegt' })
Out-Zeile 'Mainboard' "$($bb.Manufacturer) $($bb.Product)"
Out-Zeile 'BIOS/UEFI' ("{0}, Version {1}, {2}" -f $bios.Manufacturer, $bios.SMBIOSBIOSVersion, $(if ($bios.ReleaseDate) { $bios.ReleaseDate.ToString('dd.MM.yyyy') }))
Out-Zeile 'Firmware-Modus' $env:firmware_type
Out-Zeile 'Domäne/Gruppe' $(if ($cs.PartOfDomain) { "Domäne $($cs.Domain)" } else { "Arbeitsgruppe $($cs.Workgroup)" })
Out-Titel 'Windows'
$name = $os.Caption -replace '^Microsoft\s+', ''
Out-Zeile 'System' ("{0} {1} (Build {2}.{3})" -f $name, $cv.DisplayVersion, $cv.CurrentBuildNumber, $cv.UBR)
Out-Zeile 'Installiert am' $(if ($os.InstallDate) { $os.InstallDate.ToString('dd.MM.yyyy') })
if ($os.LastBootUpTime) { $d = (Get-Date) - $os.LastBootUpTime; Out-Zeile 'Läuft seit' ('{0} ({1} Tage, {2} Std.)' -f $os.LastBootUpTime.ToString('dd.MM.yyyy HH:mm'), $d.Days, $d.Hours) }
Out-Titel 'Prozessor und Arbeitsspeicher'
foreach ($c in @(Get-CimInstance Win32_Processor)) { Out-Zeile 'Prozessor' ("{0} ({1} Kerne, {2} Threads)" -f ($c.Name -replace '\s+', ' ').Trim(), $c.NumberOfCores, $c.NumberOfLogicalProcessors) }
$riegel = @(Get-CimInstance Win32_PhysicalMemory)
$slots = (Get-CimInstance Win32_PhysicalMemoryArray | Measure-Object -Property MemoryDevices -Sum).Sum
Out-Zeile 'Arbeitsspeicher' ('{0} ({1} von {2} Steckplätzen belegt)' -f (Format-GB ($riegel | Measure-Object Capacity -Sum).Sum), $riegel.Count, $(if ($slots) { $slots } else { '?' }))
foreach ($r in $riegel) {
$tempo = if ($r.ConfiguredClockSpeed) { $r.ConfiguredClockSpeed } else { $r.Speed }
Out-Zeile (" " + $r.DeviceLocator) ('{0}, {1} MT/s, {2} {3}' -f (Format-GB $r.Capacity), $tempo, ("$($r.Manufacturer)").Trim(), ("$($r.PartNumber)").Trim())
}
Out-Titel 'Datenträger'
$pd = @(Get-PhysicalDisk | Sort-Object DeviceId)
if ($pd.Count -gt 0) {
foreach ($d in $pd) {
$art = switch ("$($d.MediaType)") { 'SSD' { if ($d.BusType -eq 'NVMe') { 'NVMe-SSD' } else { 'SSD' } } 'HDD' { 'Festplatte' } default { "$($d.BusType)" } }
$zust = switch ("$($d.HealthStatus)") { 'Healthy' { 'in Ordnung' } 'Warning' { 'WARNUNG' } 'Unhealthy' { 'DEFEKT' } default { "$($d.HealthStatus)" } }
Out-Zeile "Datenträger $($d.DeviceId)" ('{0}, {1}, {2}, Zustand: {3}' -f $d.FriendlyName, $art, (Format-GB $d.Size), $zust)
}
} else {
foreach ($d in @(Get-CimInstance Win32_DiskDrive)) { Out-Zeile 'Datenträger' ('{0}, {1}, Zustand: {2}' -f $d.Model, (Format-GB $d.Size), $d.Status) }
}
foreach ($l in @(Get-CimInstance Win32_LogicalDisk -Filter 'DriveType=3')) {
$frei = if ($l.Size) { [math]::Round(100 * $l.FreeSpace / $l.Size) } else { 0 }
Out-Zeile "Laufwerk $($l.DeviceID)" ('{0} gesamt, {1} frei ({2} %){3}' -f (Format-GB $l.Size), (Format-GB $l.FreeSpace), $frei, $(if ($frei -lt 10) { ' – fast voll!' }))
}
$bl = Get-CimInstance -Namespace 'root/cimv2/security/microsoftvolumeencryption' -ClassName Win32_EncryptableVolume -Filter "DriveLetter='$($env:SystemDrive)'"
if ($bl) { Out-Zeile 'BitLocker' $(switch ([int]$bl.ProtectionStatus) { 1 { 'Systemlaufwerk verschlüsselt' } 0 { 'aus' } default { 'unbekannt' } }) }
Out-Titel 'Grafik und Bildschirm'
foreach ($g in @(Get-CimInstance Win32_VideoController)) {
$aufl = if ($g.CurrentHorizontalResolution) { ", {0} x {1}" -f $g.CurrentHorizontalResolution, $g.CurrentVerticalResolution } else { '' }
Out-Zeile 'Grafik' ('{0} (Treiber {1}{2})' -f $g.Name, $g.DriverVersion, $aufl)
}
Out-Titel 'Netzwerk'
foreach ($a in @(Get-NetAdapter -Physical | Sort-Object Name)) {
$ip = @(Get-NetIPAddress -InterfaceIndex $a.ifIndex -AddressFamily IPv4 | ForEach-Object { $_.IPAddress }) -join ', '
Out-Zeile $a.Name ('{0}, MAC {1}, {2}{3}' -f $a.InterfaceDescription, $a.MacAddress, $(if ($a.Status -eq 'Up') { $a.LinkSpeed } else { 'nicht verbunden' }), $(if ($ip) { ", IP $ip" }))
}
$akku = @(Get-CimInstance Win32_Battery)
if ($akku.Count -gt 0) {
Out-Titel 'Akku'
foreach ($b in $akku) { Out-Zeile 'Ladestand' ('{0} %' -f $b.EstimatedChargeRemaining) }
$design = (Get-CimInstance -Namespace root/wmi -ClassName BatteryStaticData | Select-Object -First 1).DesignedCapacity
$voll = (Get-CimInstance -Namespace root/wmi -ClassName BatteryFullChargedCapacity | Select-Object -First 1).FullChargedCapacity
if ($design -and $voll) { Out-Zeile 'Akku-Zustand' ('{0} % der ursprünglichen Kapazität ({1} von {2} mWh)' -f [math]::Round(100 * $voll / $design), $voll, $design) }
}
Write-Host ''
$text = $bericht -join "`r`n"
while ($true) {
Write-Host ' [K] Kopieren [S] auf dem Desktop speichern' -NoNewline -ForegroundColor DarkGray
if ($akku.Count -gt 0) { Write-Host ' [A] ausführlicher Akku-Bericht' -NoNewline -ForegroundColor DarkGray }
Write-Host ' [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 ' Kopiert.' -ForegroundColor Green }
if ($t.KeyChar -in 's', 'S') {
$datei = Join-Path ([Environment]::GetFolderPath('Desktop')) ('Steckbrief_{0}_{1}.txt' -f $env:COMPUTERNAME, (Get-Date -Format 'yyyy-MM-dd'))
[IO.File]::WriteAllText($datei, $text, [Text.Encoding]::UTF8); Write-Host " Gespeichert: $datei" -ForegroundColor Green
}
if ($t.KeyChar -in 'a', 'A' -and $akku.Count -gt 0) {
$datei = Join-Path ([Environment]::GetFolderPath('Desktop')) 'Akku-Bericht.html'
powercfg /batteryreport /output "$datei" | Out-Null
if (Test-Path $datei) { Write-Host " Akku-Bericht erstellt: $datei" -ForegroundColor Green; Start-Process $datei } else { Write-Host ' Akku-Bericht konnte nicht erstellt werden.' -ForegroundColor Yellow }
}
}