Windows-Testzeitraum anzeigen und verlängern

Für Evaluierungs- und Testinstallationen: zeigt Lizenzstatus, verbleibende Testzeit und wie oft der Zeitraum noch zurückgesetzt werden kann, und setzt ihn nach Rückfrage zurück (wie slmgr /rearm). Bei aktivierten Vollversionen bricht das Skript ab. Benötigt Administratorrechte, danach Neustart.

windows-testzeitraum.cmd 5,3 KB · läuft unter Windows 10/11 · aktualisiert am 17.10.2026 · 5 Downloads

SHA-256: ee5ba204f39a2e0a82724920440f0d9aaee458c183e534d852db6176ece8db32

Code

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

windows-testzeitraum.cmd
<# : Friederich-IT - Windows-Testzeitraum anzeigen und verlaengern
@echo off
setlocal
chcp 65001 >nul
title Windows-Testzeitraum - 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-Testzeitraum anzeigen und verlängern    Version 2.0, Oktober 2026
#  https://friederich-it.de/downloads
#
#  Zeigt Lizenzstatus, verbleibende Testzeit und wie oft der Testzeitraum
#  noch zurückgesetzt werden darf ("Rearm"). Nur nach ausdrücklicher
#  Bestätigung wird er zurückgesetzt; danach ist ein Neustart nötig.
#  Gedacht für Test-, Schulungs- und Evaluierungsinstallationen.
#  Ein aktiviertes Windows wird nicht verändert.
#  Benötigt Administratorrechte (werden beim Start angefordert).
#  Ersetzt das alte "slmgr -rearm"-Skript und kommt ohne VBScript aus.
# ==========================================================================
$ErrorActionPreference = 'Stop'
try { [Console]::OutputEncoding = [Text.Encoding]::UTF8 } catch {}
function Wait-Ende { Write-Host ''; Write-Host '  Taste drücken zum Beenden ...' -ForegroundColor DarkGray; [void][Console]::ReadKey($true); exit }
function Read-JaNein([string]$frage) {
    while ($true) {
        $a = (Read-Host "  $frage (j/n)").Trim().ToLower()
        if ($a -in 'j', 'ja', 'y', 'yes') { return $true }
        if ($a -in 'n', 'nein', 'no', '') { return $false }
        Write-Host '  Bitte j oder n eingeben.' -ForegroundColor Yellow
    }
}

$admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $admin) {
    Write-Host '  Administratorrechte werden angefordert ...'
    try { Start-Process -FilePath $env:FIT_SELF -Verb RunAs | Out-Null }
    catch { Write-Host '  Abgebrochen: Ohne Administratorrechte geht es nicht.' -ForegroundColor Yellow; Wait-Ende }
    exit
}

Write-Host ''
Write-Host '  Windows-Testzeitraum' -ForegroundColor Cyan
Write-Host '  ====================' -ForegroundColor Cyan
Write-Host '  Lizenzdaten werden gelesen ...' -ForegroundColor DarkGray
try {
    $svc  = Get-CimInstance SoftwareLicensingService
    $prod = Get-CimInstance SoftwareLicensingProduct -Filter "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND PartialProductKey IS NOT NULL" | Select-Object -First 1
} catch { Write-Host "  Fehler beim Lesen der Lizenzdaten: $($_.Exception.Message)" -ForegroundColor Red; Wait-Ende }
if (-not $prod) { Write-Host '  Es ist kein Windows-Produktschlüssel installiert.' -ForegroundColor Yellow; Wait-Ende }

$status = switch ([int]$prod.LicenseStatus) {
    0 { 'nicht lizenziert' } 1 { 'aktiviert' } 2 { 'Testphase, nicht aktiviert' } 3 { 'Testphase abgelaufen' }
    4 { 'Nachfrist (Echtheitsprüfung)' } 5 { 'nicht aktiviert (Hinweismodus)' } 6 { 'verlängerte Testphase' } default { 'unbekannt' }
}
$eval = $prod.Description -match 'TIMEBASED_EVAL'
$rest = [int]$prod.GracePeriodRemaining
$restText = if ($rest -gt 0) { '{0} Tage, {1} Stunden' -f [math]::Floor($rest / 1440), [math]::Floor(($rest % 1440) / 60) } else { '–' }
$rearm = [int]$svc.RemainingWindowsReArmCount

Write-Host ('  {0,-28}{1}' -f 'Produkt:', $prod.Name)
Write-Host ('  {0,-28}{1}' -f 'Status:', $(if ($eval) { 'Evaluierungsversion' } else { $status }))
if ($eval -and $prod.EvaluationEndDate -and $prod.EvaluationEndDate.Year -gt 2000) { Write-Host ('  {0,-28}{1}' -f 'Testversion läuft ab:', $prod.EvaluationEndDate.ToString('dd.MM.yyyy HH:mm')) }
Write-Host ('  {0,-28}{1}' -f 'Verbleibende Testzeit:', $restText)
Write-Host ('  {0,-28}{1}' -f 'Mögliche Zurücksetzungen:', $rearm)
Write-Host ''

if ([int]$prod.LicenseStatus -eq 1 -and -not $eval) {
    Write-Host '  Windows ist aktiviert. Ein Zurücksetzen ist weder nötig noch sinnvoll.' -ForegroundColor Green
    Wait-Ende
}
if ($rearm -le 0) {
    Write-Host '  Der Testzeitraum kann nicht mehr zurückgesetzt werden (keine Zurücksetzungen übrig).' -ForegroundColor Yellow
    Write-Host '  Abhilfe: Windows mit einem gültigen Schlüssel aktivieren oder neu installieren.'
    Wait-Ende
}

Write-Host '  Beim Zurücksetzen beginnt die Testzeit neu. Danach muss Windows neu starten.' -ForegroundColor Yellow
Write-Host '  Nur für Test- und Evaluierungsinstallationen gedacht; beachten Sie die Lizenzbedingungen.' -ForegroundColor Yellow
Write-Host ''
if (-not (Read-JaNein 'Testzeitraum jetzt zurücksetzen?')) { Write-Host '  Nichts geändert.'; Wait-Ende }

try {
    $r = Invoke-CimMethod -InputObject $svc -MethodName ReArmWindows
    if ($r.ReturnValue -ne 0) { throw ('Fehlercode 0x{0:X8}' -f [uint32]$r.ReturnValue) }
    Write-Host ''
    Write-Host '  Erledigt. Der Testzeitraum wird nach dem Neustart neu berechnet.' -ForegroundColor Green
} catch {
    Write-Host "  Zurücksetzen fehlgeschlagen: $($_.Exception.Message)" -ForegroundColor Red
    Write-Host '  (0xC004D307 bedeutet: Die maximale Anzahl an Zurücksetzungen ist erreicht.)'
    Wait-Ende
}
Write-Host ''
if (Read-JaNein 'Jetzt neu starten?') { Restart-Computer -Force } else { Write-Host '  Bitte später neu starten.'; Wait-Ende }