# Skript zur Vorbereitung des Images

**URL:** <https://ask.linuxmuster.net/t/skript-zur-vorbereitung-des-images/11874>\
**Category:** Windowsclient\
**Created:** [13. Oktober 2025 um 12:24 UTC](https://ask.linuxmuster.net/t/skript-zur-vorbereitung-des-images/11874 "2025-10-13T12:24:23Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Blair](https://ask.linuxmuster.net/letter_avatar_proxy/v4/letter/b/c37758/32.png) [@Blair](https://ask.linuxmuster.net/u/Blair)\
**Post date:** [13. Oktober 2025 um 12:24 UTC](https://ask.linuxmuster.net/t/skript-zur-vorbereitung-des-images/11874/1 "2025-10-13T12:24:23Z")

</div>

Hallo,

ich hab mal ein paar Sachen zusammengeworfen und mit Chatgpt etwas aufhübschen lassen.  
Herausgekommen ist ein Windows Imaging-Vorbereitungsskript, das die Windows Installation und die Festplatte auf Fehler prüft, aufräumt und am Ende Windows ordentlich herunterfährt.  
Anschließend sollte ein ordentliches Image mit Linbo ohne dirty bit oder ähnlichen Ärgernissen erzeugt werden.

Viele Grüße  
Christian

Als prepare-for-image.bat abspeichern und als Admin starten.

```auto
@echo off
:: ==========================================
:: Windows Imaging-Vorbereitungsskript (modern)
:: ==========================================

:: Admin-Rechte prüfen
net session >nul 2>&1
if %errorlevel% neq 0 (
    echo [FEHLER] Bitte fuehre dieses Skript mit Administratorrechten aus!
    pause
    exit /b
)

echo ================================
echo Pruefe Windows-Update-Aktivitaet...
echo ================================

:checkUpdates
tasklist | findstr /I "TiWorker.exe" >nul
if %errorlevel%==0 (
    echo [*] Windows Update wird noch verarbeitet...
    timeout /t 30 >nul
    goto checkUpdates
)
echo [*] Keine aktive Updateverarbeitung erkannt.

:: Prüfen, ob ein Neustart nach Update erforderlich ist
echo [*] Pruefe, ob ein Neustart erforderlich ist...
PowerShell -NoProfile -Command "if ((Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired' -ErrorAction SilentlyContinue)) { exit 1 }"
if %errorlevel% neq 0 (
    echo.
    echo ========================================
    echo [WARNUNG] Windows-Update erfordert einen Neustart!
    echo Der Neustart wird jetzt automatisch ausgefuehrt.
    echo ========================================
    timeout /t 10 >nul
    shutdown /r /t 60 /c "System wird neu gestartet, um Updates abzuschliessen"
    exit /b
)

echo ================================
echo Pruefe Fast Boot (Schnellstart)...
echo ================================

PowerShell -NoProfile -Command "if ((Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power').HiberbootEnabled -eq 1) { exit 1 }"
if %errorlevel% neq 0 (
    echo.
    echo ========================================
    echo [HINWEIS] Fast Boot ist noch aktiviert.
    echo Der Registry-Wert wird jetzt deaktiviert.
    echo Ein Neustart ist erforderlich, damit die Aenderung wirksam wird.
    echo ========================================
    timeout /t 5 >nul
    PowerShell -NoProfile -Command "Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power' -Name HiberbootEnabled -Value 0"
    shutdown /r /t 60 /c "System wird neu gestartet zur Anwendung der Fast Boot-Aenderung"
    exit /b
)

echo ================================
echo Pruefe Systemintegritaet...
echo ================================

PowerShell -NoProfile -Command "if ((Get-Volume | Where-Object { $_.DriveLetter -ne $null -and $_.HealthStatus -ne 'Healthy' }).Count -gt 0) { Write-Host '[FEHLER] Mindestens ein Volume ist nicht gesund!'; exit 1 }"
if %errorlevel% neq 0 (
    echo.
    echo ========================================
    echo [WARNUNG] Mindestens ein Volume ist nicht gesund.
    echo CHKDSK wird automatisch geplant und beim Neustart ausgefuehrt.
    echo ========================================
    timeout /t 5 >nul
    chkntfs /d
    echo y | chkdsk C: /F /R
    echo.
    echo [HINWEIS] Neustart in 60 Sekunden zur Dateisystempruefung...
    shutdown /r /t 60 /c "System wird neu gestartet zur Dateisystempruefung"
    exit /b
)

echo [*] Starte SFC Systemdatei-Pruefung...
sfc /scannow

echo [*] Starte DISM Health Check...
DISM /Online /Cleanup-Image /ScanHealth

echo ================================
echo Starte Systembereinigung...
echo ================================

echo [*] Loesche temporaere Dateien...
del /f /s /q "%TEMP%\*" >nul 2>&1
del /f /s /q "C:\Windows\Temp\*" >nul 2>&1

echo [*] Loesche Prefetch-Daten...
del /f /q "C:\Windows\Prefetch\*" >nul 2>&1

echo [*] Leere Papierkorb fuer alle Benutzer...
PowerShell -NoProfile -Command "Get-CimInstance Win32_UserProfile | Where-Object { $_.Loaded -eq $false -and $_.LocalPath -like 'C:\\Users\\*' } | ForEach-Object { $recyclePath = Join-Path $_.LocalPath 'Recycle.Bin'; if (Test-Path $recyclePath) { Remove-Item -Path $recyclePath -Recurse -Force -ErrorAction SilentlyContinue } }; try {Clear-RecycleBin -Force -ErrorAction SilentlyContinue} catch {}"

echo [*] Bereinige Windows Update Cache...
net stop wuauserv >nul 2>&1
rd /s /q "C:\Windows\SoftwareDistribution\Download" >nul 2>&1
net start wuauserv >nul 2>&1

echo [*] Starte DISM Komponentenbereinigung...
DISM /Online /Cleanup-Image /StartComponentCleanup

echo [*] Starte Storage Sense manuell...
PowerShell -NoProfile -Command "Start-StorageSense -Verbose" >nul 2>&1

echo [*] Bereinige Benutzerprofile...
for /d %%i in (C:\Users\*) do (
    del /f /s /q "%%i\AppData\Local\Temp\*" >nul 2>&1
    del /f /s /q "%%i\AppData\Local\Microsoft\Windows\INetCache\*" >nul 2>&1
    del /f /s /q "%%i\AppData\Roaming\Microsoft\Windows\Recent\*" >nul 2>&1
)

echo [*] Loesche Event Logs...
for /f %%x in ('wevtutil el') do (
    echo Loesche %%x...
    wevtutil cl "%%x" 2>nul
)

echo [*] Entferne alte Windows-Installationsreste...
rd /s /q "C:\$WINDOWS.~BT" >nul 2>&1
rd /s /q "C:\$WINDOWS.~WS" >nul 2>&1
rd /s /q "C:\$GetCurrent" >nul 2>&1

echo [*] Erzwinge Dateisystem-Flush...
PowerShell -NoProfile -Command "Get-Volume | ForEach-Object { if ($_.DriveLetter) { try { $path = $_.DriveLetter + ':\flush.tmp'; [System.IO.File]::WriteAllText($path, 'flush'); Remove-Item $path -Force } catch {} } }"

echo.
echo ================================
echo Bereinigung abgeschlossen
echo System wird heruntergefahren
echo ================================
timeout /t 5 >nul
shutdown /s /t 0 /f

```

---

<div class="post-metadata">

**Author:** ![baumhof](https://ask.linuxmuster.net/user_avatar/ask.linuxmuster.net/baumhof/32/1504_2.png) [@baumhof](https://ask.linuxmuster.net/u/baumhof)\
**Post date:** [13. Oktober 2025 um 18:27 UTC](https://ask.linuxmuster.net/t/skript-zur-vorbereitung-des-images/11874/2 "2025-10-13T18:27:18Z")

</div>

Hallo Christian,

das ist ja cool: vielen Dank 🙂  
LG  
Holger

---

<div class="post-metadata">

**Author:** ![thomas](https://ask.linuxmuster.net/user_avatar/ask.linuxmuster.net/thomas/32/1530_2.png) [@thomas](https://ask.linuxmuster.net/u/thomas)\
**Post date:** [14. Oktober 2025 um 07:24 UTC](https://ask.linuxmuster.net/t/skript-zur-vorbereitung-des-images/11874/3 "2025-10-14T07:24:39Z")

</div>

Hallo Christian,

sehr gut! Dürfen wir das zusammen mit Linbo ausliefern? Falls ja, was soll als Copyright-/Lizenzhinweis in den Header?

VG, Thomas

---

<div class="post-metadata">

**Author:** ![Blair](https://ask.linuxmuster.net/letter_avatar_proxy/v4/letter/b/c37758/32.png) [@Blair](https://ask.linuxmuster.net/u/Blair)\
**Post date:** [14. Oktober 2025 um 10:11 UTC](https://ask.linuxmuster.net/t/skript-zur-vorbereitung-des-images/11874/4 "2025-10-14T10:11:54Z")

</div>

Hallo Thomas,

natürlich kannst du das machen.  
Hab es halt in Chatgpt verschönern lassen, aber die schreiben, dass das keine Auswirkungen auf ein Copyright hat.  
Als Lizenz wäre GPL ok, du kannst aber auch eine andere freie Lizenz nehmen.

Viele Grüße  
Christian

---

<div class="post-metadata">

**Author:** ![Tw33ki](https://ask.linuxmuster.net/user_avatar/ask.linuxmuster.net/tw33ki/32/5747_2.png) [@Tw33ki](https://ask.linuxmuster.net/u/Tw33ki)\
**Post date:** [21. Oktober 2025 um 06:06 UTC](https://ask.linuxmuster.net/t/skript-zur-vorbereitung-des-images/11874/5 "2025-10-21T06:06:38Z")

</div>

Moin,

coole Sache! Hatte ich auch schon öfter drüber gebrainstormt.

Ich hab mich aber noch folgendes gefragt:  
was ist mit defprof? Ich denke bei dieser Frage an den linuxmuster-linuxclient, der das ja im selben zuge für einen erledigt.

was ist mit möglicherweise vorhanden Benutzerprofilen?  
Wir machen halt immer einen Rotstart bevor wir das Image bearbeiten, eben damit keine Benutzerprofile im Image landen.  
Falls doch mal eins gibt, löschen wir das über diese erweiterten Systemeigenschaften. Sollte man das auch einarbeiten?

Timo

P.S. @thomas an welche Stelle wollt Ihr das Skript platzieren?

---

<div class="post-metadata">

**Author:** ![thomas](https://ask.linuxmuster.net/user_avatar/ask.linuxmuster.net/thomas/32/1530_2.png) [@thomas](https://ask.linuxmuster.net/u/thomas)\
**Post date:** [22. Oktober 2025 um 08:51 UTC](https://ask.linuxmuster.net/t/skript-zur-vorbereitung-des-images/11874/6 "2025-10-22T08:51:29Z")

</div>

Moin,

beim nächsten Linbo-Release wird das unter `C:\linuxmuster-win` platziert.

VG, Thomas

---

<div class="post-metadata">

**Author:** ![baumhof](https://ask.linuxmuster.net/user_avatar/ask.linuxmuster.net/baumhof/32/1504_2.png) [@baumhof](https://ask.linuxmuster.net/u/baumhof)\
**Post date:** [7. November 2025 um 22:28 UTC](https://ask.linuxmuster.net/t/skript-zur-vorbereitung-des-images/11874/7 "2025-11-07T22:28:21Z")

</div>

Hallo Christian,  
ich hab in den letzten Tagen ein neues Win11 Image erstellt, software installiert, Einstellungen gemacht und „normal“ gereinigt (Datenträgerbereinigung).  
Es war dann 18GB groß.  
Heute hab ich dein script drauf losgelassen: als lokaler admin hab ich es „Als Administrator“ laufen lassen.  
Das Image ist nurnoch 16GB groß.  
2 GB abgespeckt: REspect.  
Vielen Dank.

LG  
Holger
