ISO erstellen mit OSCDIMG und meinem Script [HowTo]

Probleme mit der Installation von Windows 11?
Antworten
Benutzeravatar
Holgi
Guru
Guru
Beiträge: 3976
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 523 Mal
Danke erhalten: 816 Mal
Gender:

ISO erstellen mit OSCDIMG und meinem Script [HowTo]

Beitrag von Holgi » 04.04.2026, 18:42

viele von uns hier erstellen/verändern gerne mal das Windows 10/11 Installationsmedium.
Z.B. durch Austausch/Löschen von Dateien, oder durch das Einbringen zusätzlicher Dateien (autounattend.xml, $OEM$ Ordner).
Beispiel:
viewtopic.php?t=30604
Wenn man das nicht mit einem ISO Tool macht, sondern durch Extraktion der ISO-Datei auf die Festplatte, dann muss man anschließend den Extraktionsordner wieder zu einer ISO "zusammensetzen". Dafür benötigt man das Tool von Microsoft mit dem Namen OSCDIMG(.exe), welches man früher (und auch noch heute) aus dem Windows ADK bekommt.
Mein Script holt sich das Tool per Winget, wenn es noch nicht auf eurer Festplatte ist.
Der Ablauf ist weitestgehend selbsterklärend. Hier einige Bildschirmfotos:
Screenshot 2026-04-04 182835.png
Screenshot 2026-04-04 180226.png
Screenshot 2026-04-04 180303.png

oscdimg.cmd

Code: Alles auswählen

@echo off
setlocal EnableExtensions EnableDelayedExpansion
chcp 65001 >nul

title Windows ISO mit OSCDIMG erstellen

:: ------------------------------------------------------------
:: 1) OSCDIMG finden oder installieren
:: ------------------------------------------------------------
call :FindOscdimg
if defined OSCDIMG_EXE goto AskSrcIso

echo OSCDIMG wurde nicht gefunden.
echo Es wird jetzt per WinGet installiert ...
echo.

where winget >nul 2>nul
if errorlevel 1 (
    echo FEHLER: winget wurde nicht gefunden.
    echo Bitte installiere zuerst den App Installer bzw. aktiviere WinGet.
    pause >nul
    goto End
)

winget install -e --id Microsoft.OSCDIMG -s winget --accept-package-agreements --accept-source-agreements
if errorlevel 1 (
    echo.
    echo FEHLER: Die Installation von OSCDIMG ist fehlgeschlagen.
    pause >nul
    goto End
)

echo.
echo Suche OSCDIMG nach der Installation erneut ...
call :FindOscdimg
if not defined OSCDIMG_EXE (
    echo FEHLER: OSCDIMG konnte nach der Installation nicht gefunden werden.
    echo Hinweis: Shell ggf. neu starten und Skript erneut ausfuehren.
    pause >nul
    goto End
)

:: ------------------------------------------------------------
:: Eingaben
:: ------------------------------------------------------------
:AskSrcIso
cls
echo                                    \\!//
echo                                    (o o)
echo -------------------------------oOOo-(_)-oOOo-------------------------------
echo.
echo Gefunden:
echo   OSCDIMG = "%OSCDIMG_EXE%"
echo.

set "SRCISO="
set /p "SRCISO=Pfad zur vorhandenen Windows-ISO (z.B. C:\ISO\Windows11.iso): "
if not defined SRCISO (
    echo FEHLER: Kein Pfad zur vorhandenen ISO angegeben.
    pause >nul
    goto AskSrcIso
)

for %%I in ("%SRCISO%") do (
    set "SRCISO=%%~fI"
    set "SRCISONAME=%%~nxI"
    set "SRCISOBASENAME=%%~nI"
)

if not exist "%SRCISO%" (
    echo FEHLER: Die angegebene ISO wurde nicht gefunden.
    echo   "%SRCISO%"
    pause >nul
    goto AskSrcIso
)

goto AskVmName

:AskVmName
cls
echo Gefunden:
echo   OSCDIMG   = "%OSCDIMG_EXE%"
echo   Quell-ISO = "%SRCISO%"
echo.

set "VMName="
set /p "VMName=Geben Sie der neuen ISO einen Namen (ohne .iso, z.B. Windows11Pro): "
if not defined VMName (
    echo FEHLER: Kein ISO-Name angegeben.
    pause >nul
    goto AskVmName
)

call :ValidateIsoName "%VMName%"
if errorlevel 1 goto AskVmName

if /I "%VMName%"=="%SRCISOBASENAME%" (
    echo FEHLER: Der neue ISO-Name darf nicht dem Namen der vorhandenen ISO entsprechen.
    echo Vorhandene ISO : "%SRCISONAME%"
    echo Neue ISO       : "%VMName%.iso"
    pause >nul
    goto AskVmName
)

goto AskOutDir

:AskOutDir
cls
echo Gefunden:
echo   OSCDIMG   = "%OSCDIMG_EXE%"
echo   Quell-ISO = "%SRCISO%"
echo   Neue ISO  = "%VMName%.iso"
echo.

set "OUTDIR="
set /p "OUTDIR=Zielordner fuer die neue ISO [Leer = aktueller Ordner]: "
if not defined OUTDIR set "OUTDIR=%~dp0"

for %%I in ("%OUTDIR%") do set "OUTDIR=%%~fI"

if not exist "%OUTDIR%" (
    echo Zielordner wird erstellt ...
    md "%OUTDIR%" 2>nul
    if errorlevel 1 (
        echo FEHLER: Zielordner konnte nicht erstellt werden.
        pause >nul
        goto AskOutDir
    )
)

call :BuildIsoFile
if /I "%ISOFILE%"=="%SRCISO%" (
    echo FEHLER: Die neue ISO wuerde die Quell-ISO ueberschreiben.
    echo Quelle: "%SRCISO%"
    echo Ziel  : "%ISOFILE%"
    pause >nul
    goto AskVmName
)

if exist "%ISOFILE%" (
    echo.
    echo Die neue ISO existiert bereits:
    echo   "%ISOFILE%"
    echo.
    echo [N] Neuen Namen waehlen
    echo [E] Ersetzen
    echo [A] Abbrechen
    choice /C NEA /N /M "Bitte waehlen Sie [N/E/A]: "

    if errorlevel 3 (
        echo Vorgang wurde abgebrochen.
        pause >nul
        goto AskVmName
    )

    if errorlevel 2 (
        echo Vorhandene ISO wird geloescht ...
        del /f /q "%ISOFILE%" >nul 2>nul
        if exist "%ISOFILE%" (
            echo FEHLER: Die vorhandene ISO konnte nicht geloescht werden.
            pause >nul
            goto AskVmName
        )
    ) else (
        goto AskVmName
    )
)

goto AskExtractPath

:AskExtractPath
cls
echo Gefunden:
echo   OSCDIMG        = "%OSCDIMG_EXE%"
echo   Quell-ISO      = "%SRCISO%"
echo   Neue ISO       = "%ISOFILE%"
echo.

set "ISO="
set /p "ISO=Pfad zum Entpacken der Windows-Installationsdateien (z.B. C:\ISO\Win11): "
if not defined ISO (
    echo FEHLER: Kein Entpackpfad angegeben.
    pause >nul
    goto AskExtractPath
)

for %%I in ("%ISO%") do set "ISO=%%~fI"

if not exist "%ISO%" (
    echo Entpackordner wird erstellt ...
    md "%ISO%" 2>nul
    if errorlevel 1 (
        echo FEHLER: Entpackordner konnte nicht erstellt werden.
        pause >nul
        goto AskExtractPath
    )
)

set "DIRCOUNT=0"
for /f %%A in ('dir /a /b "%ISO%" 2^>nul ^| find /c /v ""') do set "DIRCOUNT=%%A"

if not "%DIRCOUNT%"=="0" (
    echo.
    echo Der Entpackordner ist nicht leer:
    echo   "%ISO%"
    echo.
    echo [L] Leeren
    echo [B] Behalten
    echo [A] Abbrechen
    choice /C LBA /N /M "Bitte waehlen Sie [L/B/A]: "

    if errorlevel 3 (
        echo Vorgang wurde abgebrochen.
        pause >nul
        goto AskExtractPath
    )

    if errorlevel 2 (
        echo Vorhandene Dateien bleiben erhalten.
    ) else (
        echo Entpackordner wird geleert ...
        call :ClearFolder "%ISO%"
        if errorlevel 1 (
            echo FEHLER: Entpackordner konnte nicht vollstaendig geleert werden.
            pause >nul
            goto AskExtractPath
        )
    )
)

goto ShowSummary

:: ------------------------------------------------------------
:: Zusammenfassung
:: ------------------------------------------------------------
:ShowSummary
cls
echo ********************************************************************
echo.
echo   Quell-ISO  : "%SRCISO%"
echo   Entpacken  : "%ISO%"
echo   Neue ISO   : "%ISOFILE%"
echo   Tool       : "%OSCDIMG_EXE%"
echo.
echo ********************************************************************
echo.

:: ------------------------------------------------------------
:: 2) ISO mounten und entpacken
:: ------------------------------------------------------------
echo ISO wird gemountet ...
set "ISODRIVE="
set "ROBOLOG=%TEMP%\CreateISO_Robocopy.log"

for /f "usebackq delims=" %%D in (`powershell -NoProfile -Command "$p = [Environment]::GetEnvironmentVariable('SRCISO'); $img = Mount-DiskImage -ImagePath $p -PassThru; ($img | Get-Volume).DriveLetter"`) do (
    set "ISODRIVE=%%D"
)

if not defined ISODRIVE (
    echo FEHLER: Die ISO konnte nicht gemountet werden.
    pause >nul
    goto End
)

set "ISODRIVE=%ISODRIVE%:"
echo ISO gemountet als Laufwerk %ISODRIVE%

if not exist "%ISODRIVE%\setup.exe" (
    echo FEHLER: Das gemountete ISO-Laufwerk ist nicht wie erwartet lesbar.
    echo Erwartete Datei nicht gefunden: "%ISODRIVE%\setup.exe"
    powershell -NoProfile -Command "$p = [Environment]::GetEnvironmentVariable('SRCISO'); Dismount-DiskImage -ImagePath $p" >nul 2>nul
    pause >nul
    goto End
)

echo.
echo Dateien werden entpackt, bitte warten ...
echo Robocopy-Protokoll: "%ROBOLOG%"
echo.

del "%ROBOLOG%" /f /q >nul 2>nul

robocopy "%ISODRIVE%\." "%ISO%" *.* /E /R:1 /W:1 /XJ /TEE /LOG:"%ROBOLOG%"
set "ROBOCODE=%ERRORLEVEL%"

echo.
echo ISO wird wieder ausgehaengt ...
powershell -NoProfile -Command "$p = [Environment]::GetEnvironmentVariable('SRCISO'); Dismount-DiskImage -ImagePath $p" >nul 2>nul

if %ROBOCODE% GEQ 8 (
    echo.
    echo FEHLER: Beim Kopieren der Dateien aus der ISO ist ein Fehler aufgetreten.
    echo Robocopy-Fehlercode: %ROBOCODE%
    echo Siehe Protokoll:
    echo   "%ROBOLOG%"
    echo.
    pause >nul
    goto End
)

:: ------------------------------------------------------------
:: 3) Plausibilitaetspruefungen
:: ------------------------------------------------------------
if not exist "%ISO%\efi\microsoft\boot\memtest.efi" (
    echo FEHLER: Die Windows-Installationsdateien scheinen unvollstaendig zu sein.
    echo Erwartete Datei fehlt:
    echo   "%ISO%\efi\microsoft\boot\memtest.efi"
    pause >nul
    goto AskExtractPath
)

if not exist "%ISO%\boot\etfsboot.com" (
    echo FEHLER: Bootdatei fuer BIOS fehlt:
    echo   "%ISO%\boot\etfsboot.com"
    pause >nul
    goto AskExtractPath
)

if not exist "%ISO%\efi\microsoft\boot\efisys.bin" if not exist "%ISO%\efi\microsoft\boot\efisys_noprompt.bin" (
    echo FEHLER: UEFI-Bootdatei fehlt:
    echo   "%ISO%\efi\microsoft\boot\efisys.bin"
    echo oder
    echo   "%ISO%\efi\microsoft\boot\efisys_noprompt.bin"
    pause >nul
    goto AskExtractPath
)

:: ------------------------------------------------------------
:: 4) Optional: noprompt-Dateien aktivieren
:: ------------------------------------------------------------
if exist "%ISO%\efi\microsoft\boot\cdboot_noprompt.efi" (
    if not exist "%ISO%\efi\microsoft\boot\cdboot-prompt.efi" (
        echo Benenne UEFI-Bootdateien fuer "no prompt" um ...
        ren "%ISO%\efi\microsoft\boot\cdboot.efi" "cdboot-prompt.efi" >nul 2>nul
        ren "%ISO%\efi\microsoft\boot\cdboot_noprompt.efi" "cdboot.efi" >nul 2>nul
    )
)

if exist "%ISO%\efi\microsoft\boot\efisys_noprompt.bin" (
    if not exist "%ISO%\efi\microsoft\boot\efisys_prompt.bin" (
        ren "%ISO%\efi\microsoft\boot\efisys.bin" "efisys_prompt.bin" >nul 2>nul
        ren "%ISO%\efi\microsoft\boot\efisys_noprompt.bin" "efisys.bin" >nul 2>nul
    )
)
cls
echo.
echo ============================================================================
echo.
echo   Die Installationsdateien sind jetzt entpackt und vorbereitet.
echo.
echo   Sie koennen nun manuelle Anpassungen vornehmen, z.B.:
echo.
echo     - Treiber hinzufuegen
echo     - autounattend.xml oder unattend.xml einfuegen
echo     - Dateien austauschen oder Skripte ergaenzen
echo     - Images mit DISM bearbeiten
echo.
echo   Entpackter Ordner:
echo     "%ISO%"
echo.
echo   Wenn Sie mit allen Anpassungen fertig sind, geben Sie bitte zur
echo   Sicherheit exakt folgende Freigabe ein:
echo.
echo     JETZT ISO BAUEN
echo.
echo   Nur dann wird die ISO-Erstellung fortgesetzt.
echo.
echo ============================================================================

:WaitForContinue
set "CONTINUECODE="
set /p "CONTINUECODE=Freigabe eingeben: "

if /I "%CONTINUECODE%"=="JETZT ISO BAUEN" goto ContinueIsoBuild

echo.
echo Falsche Eingabe. Das Skript wird noch nicht fortgesetzt.
echo Bitte geben Sie exakt ein:
echo   JETZT ISO BAUEN
echo.
goto WaitForContinue

:ContinueIsoBuild
echo.
echo Erstelle ISO, bitte warten ...
echo.

:: ------------------------------------------------------------
:: 5) ISO erstellen
:: ------------------------------------------------------------
"%OSCDIMG_EXE%" -m -o -u2 -udfver102 -bootdata:2#p0,e,b"%ISO%\boot\etfsboot.com"#pEF,e,b"%ISO%\efi\microsoft\boot\efisys.bin" "%ISO%" "%ISOFILE%"
if errorlevel 1 (
    echo.
    echo FEHLER: Die ISO konnte nicht erstellt werden.
    pause >nul
    goto End
)

echo.
echo Fertig.
echo ISO erfolgreich erstellt:
echo   "%ISOFILE%"
echo.
pause
goto End

:: ------------------------------------------------------------
:: Unterprogramme
:: ------------------------------------------------------------
:BuildIsoFile
if "%OUTDIR:~-1%"=="\" (
    set "ISOFILE=%OUTDIR%%VMName%.iso"
) else (
    set "ISOFILE=%OUTDIR%\%VMName%.iso"
)
exit /b 0

:ValidateIsoName
set "CHECKNAME=%~1"
if not defined CHECKNAME (
    echo FEHLER: Kein ISO-Name angegeben.
    pause >nul
    exit /b 1
)

set "PS_NAME=%CHECKNAME%"

powershell -NoProfile -Command ^
    "$n = [Environment]::GetEnvironmentVariable('PS_NAME');" ^
    "if ([string]::IsNullOrWhiteSpace($n)) { exit 1 }" ^
    "if ($n.Trim() -ne $n) { exit 1 }" ^
    "if ($n -in '.', '..') { exit 1 }" ^
    "if ($n -match '[\\/:*?""<>|]') { exit 1 }" ^
    "$reserved = 'CON','PRN','AUX','NUL','COM1','COM2','COM3','COM4','COM5','COM6','COM7','COM8','COM9','LPT1','LPT2','LPT3','LPT4','LPT5','LPT6','LPT7','LPT8','LPT9';" ^
    "if ($reserved -contains $n.ToUpperInvariant()) { exit 1 }" ^
    "exit 0"

if errorlevel 1 (
    echo FEHLER: Der ISO-Name ist ungueltig.
    echo.
    echo Nicht erlaubt:
    echo   - leerer Name
    echo   - fuehrende oder abschliessende Leerzeichen
    echo   - . oder ..
    echo   - Zeichen \ / : * ? ^" ^< ^> ^|
    echo   - reservierte Namen wie CON, PRN, AUX, NUL, COM1, LPT1
    pause >nul
    exit /b 1
)

exit /b 0

:ClearFolder
set "TARGETFOLDER=%~1"
if "%TARGETFOLDER%"=="" exit /b 1
if not exist "%TARGETFOLDER%\" exit /b 1

if /I "%TARGETFOLDER%"=="C:\" exit /b 1
if /I "%TARGETFOLDER%"=="C:" exit /b 1
if /I "%TARGETFOLDER%"=="D:\" exit /b 1
if /I "%TARGETFOLDER%"=="D:" exit /b 1
if /I "%TARGETFOLDER%"=="%SystemDrive%\" exit /b 1
if /I "%TARGETFOLDER%"=="%SystemDrive%" exit /b 1

del /f /s /q "%TARGETFOLDER%\*" >nul 2>nul
for /d %%D in ("%TARGETFOLDER%\*") do rd /s /q "%%~fD" >nul 2>nul

set "LEFTCOUNT=0"
for /f %%A in ('dir /a /b "%TARGETFOLDER%" 2^>nul ^| find /c /v ""') do set "LEFTCOUNT=%%A"
if not "%LEFTCOUNT%"=="0" exit /b 1

exit /b 0

:FindOscdimg
set "OSCDIMG_EXE="

for /f "delims=" %%I in ('where oscdimg.exe 2^>nul') do (
    if exist "%%~fI" (
        set "OSCDIMG_EXE=%%~fI"
        goto :eof
    )
)

for /f "delims=" %%I in ('dir /b /s "%LOCALAPPDATA%\Microsoft\WinGet\Packages\oscdimg.exe" 2^>nul') do (
    if exist "%%~fI" (
        set "OSCDIMG_EXE=%%~fI"
        goto :eof
    )
)

for /f "delims=" %%I in ('dir /b /s "%LOCALAPPDATA%\Microsoft\WinGet\Links\oscdimg.exe" 2^>nul') do (
    if exist "%%~fI" (
        set "OSCDIMG_EXE=%%~fI"
        goto :eof
    )
)

for /f "delims=" %%I in ('dir /b /s "%ProgramFiles(x86)%\Windows Kits\*\Assessment and Deployment Kit\Deployment Tools\*\Oscdimg\oscdimg.exe" 2^>nul') do (
    if exist "%%~fI" (
        set "OSCDIMG_EXE=%%~fI"
        goto :eof
    )
)

for /f "delims=" %%I in ('dir /b /s "%ProgramFiles%\Windows Kits\*\Assessment and Deployment Kit\Deployment Tools\*\Oscdimg\oscdimg.exe" 2^>nul') do (
    if exist "%%~fI" (
        set "OSCDIMG_EXE=%%~fI"
        goto :eof
    )
)

goto :eof

:End
endlocal
exit /b
oscdimg.zip
Viel Spaß. Und wie immer gilt: Kritiken und Verbesserungsvorschläge immer gerne willkommen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Holgi am 06.04.2026, 11:23, insgesamt 1-mal geändert.
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Tante Google

ISO erstellen mit OSCDIMG und meinem Script [HowTo]

Beitrag von Tante Google » 04.04.2026, 18:42


Gast2025

Re: ISO erstellen mit OSCDIMG und meinem Script [HowTo}

Beitrag von Gast2025 » 05.04.2026, 19:24

@OSCDIMG finden oder installieren
Fehler beim herunterladen:
Internetverbindung konnte nicht ermittelt werden
Bitte aktivieren Sie jetzt für den benoetigten Download die Netzwerkkarte
Online Modus:
Erneute Abfrage
OSCDIMG wurde erfolgreich heruntergeladen
Weiter im Offline Modus:
Sie koennen die Internetverbindung jetzt wieder trennen

Anmerkung:
Defender und Energieverwaltung koennen die Erstellung beeinflussen
Keine Administratorrechte ermittelt
Benöetigter Speicherplatz fuer die Erstellung der neuen ISO

@Verbesserungsvorschläge immer gerne willkommen.
Spitzenleistung Holgi :daumen:
Danke

Benutzeravatar
Holgi
Guru
Guru
Beiträge: 3976
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 523 Mal
Danke erhalten: 816 Mal
Gender:

Re: ISO erstellen mit OSCDIMG und meinem Script [HowTo}

Beitrag von Holgi » 06.04.2026, 02:57

Gast2025 hat geschrieben: 05.04.2026, 19:24 Internetverbindung konnte nicht ermittelt werden
...
Anmerkung:
Defender und Energieverwaltung koennen die Erstellung beeinflussen
Keine Administratorrechte ermittelt
Benöetigter Speicherplatz fuer die Erstellung der neuen ISO
...
Spitzenleistung Holgi :daumen:
Danke
danke fürs Testen. :dankeschoen:
Defender, Energieverwaltung und Administratorrechte habe ich jetzt mal mit aufgenommen.
Wie man das mit "Benöetigter Speicherplatz fuer die Erstellung der neuen ISO" hinbekommt, weiß ich ehrlich gesagt nicht.
Das müßte man vlt. mit Powershell berechnen. Aber was nimmt man als Grundlage? Die Größe des modifizierten Ordners mit den Installationsdateien? + Puffer?
Habt ihr evtl. eine Idee zur Umsetzung?

oscdimg2.cmd
Code kopieren, in Notepad einsetzen und mit ANSI als Codepage abspeichern

Code: Alles auswählen

@Echo off
cls
echo                                    \\!//
echo ISO erstellen mit OSCDIMG          (o o)
echo -------------------------------oOOo-(_)-oOOo-------------------------------
echo.
chcp 65001 >nul
:: Administratorrechte prüfen
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo Bitte fuhren Sie dieses Skript als Administrator aus!
    pause
    exit /b 1
)

setlocal EnableExtensions EnableDelayedExpansion


title Windows ISO mit OSCDIMG erstellen

:: ------------------------------------------------------------
:: 1) OSCDIMG finden oder installieren
:: ------------------------------------------------------------
call :FindOscdimg
if defined OSCDIMG_EXE goto AskSrcIso

echo OSCDIMG wurde nicht gefunden.
echo Es wird jetzt versucht, per WinGet zu installieren ...
echo.

where winget >nul 2>nul
if errorlevel 1 (
    echo FEHLER: winget wurde nicht gefunden.
    echo Bitte installiere zuerst den App Installer bzw. aktiviere WinGet.
    pause >nul
    goto End
)

echo Prüfe Internetverbindung...

rem 1) Erst prüfen, ob überhaupt eine Standardroute existiert
route print 0.0.0.0 | find "0.0.0.0" >nul
if errorlevel 1 (
    echo Kein Netzwerkzugang
timeout /t 5 >nul
goto no_internet
)

rem 2) Echter Verbindungstest mit Timeout
ping 8.8.8.8 -n 1 -w 1500 >nul
if errorlevel 1 (
    echo Kein Internetzugang
timeout /t 5 >nul
goto no_internet
)

rem 3) Optional: DNS separat prüfen
nslookup google.com 1.1.1.1 >nul 2>&1
if errorlevel 1 (
    echo Internet OK, aber DNS Problem
timeout /t 5 >nul
goto no_internet
)

echo Internetverbindung vollständig OK 

winget install -e --id Microsoft.OSCDIMG -s winget --accept-package-agreements --accept-source-agreements
if errorlevel 1 (
    echo.
    echo FEHLER: Die Installation von OSCDIMG ist fehlgeschlagen.
    pause >nul
    goto End
)


echo.
echo Suche OSCDIMG nach der Installation erneut ...
call :FindOscdimg
if not defined OSCDIMG_EXE (
    echo FEHLER: OSCDIMG konnte nach der Installation nicht gefunden werden.
    echo Hinweis: Shell ggf. neu starten und Skript erneut ausfuehren.
    pause >nul
    goto End
)

:: ------------------------------------------------------------
:: Eingaben
:: ------------------------------------------------------------
:AskSrcIso
cls
echo                                    \\!//
echo ISO erstellen mit OSCDIMG          (o o)
echo -------------------------------oOOo-(_)-oOOo-------------------------------
echo.
echo Gefunden:
echo   OSCDIMG = "%OSCDIMG_EXE%"
echo.

set "SRCISO="
set /p "SRCISO=Pfad zur vorhandenen Windows-ISO (z.B. C:\ISO\Windows11.iso): "
if not defined SRCISO (
    echo FEHLER: Kein Pfad zur vorhandenen ISO angegeben.
    pause >nul
    goto AskSrcIso
)

for %%I in ("%SRCISO%") do (
    set "SRCISO=%%~fI"
    set "SRCISONAME=%%~nxI"
    set "SRCISOBASENAME=%%~nI"
)

if not exist "%SRCISO%" (
    echo FEHLER: Die angegebene ISO wurde nicht gefunden.
    echo   "%SRCISO%"
    pause >nul
    goto AskSrcIso
)

goto AskVmName

:AskVmName
cls
echo Gefunden:
echo   OSCDIMG   = "%OSCDIMG_EXE%"
echo   Quell-ISO = "%SRCISO%"
echo.

set "VMName="
set /p "VMName=Geben Sie der neuen ISO einen Namen (ohne .iso, z.B. Windows11Pro): "
if not defined VMName (
    echo FEHLER: Kein ISO-Name angegeben.
    pause >nul
    goto AskVmName
)

call :ValidateIsoName "%VMName%"
if errorlevel 1 goto AskVmName

if /I "%VMName%"=="%SRCISOBASENAME%" (
    echo FEHLER: Der neue ISO-Name darf nicht dem Namen der vorhandenen ISO entsprechen.
    echo Vorhandene ISO : "%SRCISONAME%"
    echo Neue ISO       : "%VMName%.iso"
    pause >nul
    goto AskVmName
)

goto AskOutDir

:AskOutDir
cls
echo Gefunden:
echo   OSCDIMG   = "%OSCDIMG_EXE%"
echo   Quell-ISO = "%SRCISO%"
echo   Neue ISO  = "%VMName%.iso"
echo.

set "OUTDIR="
set /p "OUTDIR=Zielordner fuer die neue ISO [Leer = aktueller Ordner]: "
if not defined OUTDIR set "OUTDIR=%~dp0"

for %%I in ("%OUTDIR%") do set "OUTDIR=%%~fI"

if not exist "%OUTDIR%" (
    echo Zielordner wird erstellt ...
    md "%OUTDIR%" 2>nul
    if errorlevel 1 (
        echo FEHLER: Zielordner konnte nicht erstellt werden.
        pause >nul
        goto AskOutDir
    )
)

call :BuildIsoFile
if /I "%ISOFILE%"=="%SRCISO%" (
    echo FEHLER: Die neue ISO wuerde die Quell-ISO ueberschreiben.
    echo Quelle: "%SRCISO%"
    echo Ziel  : "%ISOFILE%"
    pause >nul
    goto AskVmName
)

if exist "%ISOFILE%" (
    echo.
    echo Die neue ISO existiert bereits:
    echo   "%ISOFILE%"
    echo.
    echo [N] Neuen Namen waehlen
    echo [E] Ersetzen
    echo [A] Abbrechen
    choice /C NEA /N /M "Bitte waehlen Sie [N/E/A]: "

    if errorlevel 3 (
        echo Vorgang wurde abgebrochen.
        pause >nul
        goto AskVmName
    )

    if errorlevel 2 (
        echo Vorhandene ISO wird geloescht ...
        del /f /q "%ISOFILE%" >nul 2>nul
        if exist "%ISOFILE%" (
            echo FEHLER: Die vorhandene ISO konnte nicht geloescht werden.
            pause >nul
            goto AskVmName
        )
    ) else (
        goto AskVmName
    )
)

goto AskExtractPath

:AskExtractPath
cls
echo Gefunden:
echo   OSCDIMG        = "%OSCDIMG_EXE%"
echo   Quell-ISO      = "%SRCISO%"
echo   Neue ISO       = "%ISOFILE%"
echo.

set "ISO="
set /p "ISO=Pfad zum Entpacken der Windows-Installationsdateien (z.B. C:\ISO\Win11): "
if not defined ISO (
    echo FEHLER: Kein Entpackpfad angegeben.
    pause >nul
    goto AskExtractPath
)

for %%I in ("%ISO%") do set "ISO=%%~fI"

if not exist "%ISO%" (
    echo Entpackordner wird erstellt ...
    md "%ISO%" 2>nul
    if errorlevel 1 (
        echo FEHLER: Entpackordner konnte nicht erstellt werden.
        pause >nul
        goto AskExtractPath
    )
)

set "DIRCOUNT=0"
for /f %%A in ('dir /a /b "%ISO%" 2^>nul ^| find /c /v ""') do set "DIRCOUNT=%%A"

if not "%DIRCOUNT%"=="0" (
    echo.
    echo Der Entpackordner ist nicht leer:
    echo   "%ISO%"
    echo.
    echo [L] Leeren
    echo [B] Behalten
    echo [A] Abbrechen
    choice /C LBA /N /M "Bitte waehlen Sie [L/B/A]: "

    if errorlevel 3 (
        echo Vorgang wurde abgebrochen.
        pause >nul
        goto AskExtractPath
    )

    if errorlevel 2 (
        echo Vorhandene Dateien bleiben erhalten.
    ) else (
        echo Entpackordner wird geleert ...
        call :ClearFolder "%ISO%"
        if errorlevel 1 (
            echo FEHLER: Entpackordner konnte nicht vollstaendig geleert werden.
            pause >nul
            goto AskExtractPath
        )
    )
)

goto ShowSummary

:: ------------------------------------------------------------
:: Zusammenfassung
:: ------------------------------------------------------------
:ShowSummary
cls
echo ********************************************************************
echo.
echo   Quell-ISO  : "%SRCISO%"
echo   Entpacken  : "%ISO%"
echo   Neue ISO   : "%ISOFILE%"
echo   Tool       : "%OSCDIMG_EXE%"
echo.
echo ********************************************************************
echo.

:: ------------------------------------------------------------
:: 2) ISO mounten und entpacken
:: ------------------------------------------------------------
echo ISO wird gemountet ...
set "ISODRIVE="
set "ROBOLOG=%TEMP%\CreateISO_Robocopy.log"

for /f "usebackq delims=" %%D in (`powershell -NoProfile -Command "$p = [Environment]::GetEnvironmentVariable('SRCISO'); $img = Mount-DiskImage -ImagePath $p -PassThru; ($img | Get-Volume).DriveLetter"`) do (
    set "ISODRIVE=%%D"
)

if not defined ISODRIVE (
    echo FEHLER: Die ISO konnte nicht gemountet werden.
    pause >nul
    goto End
)

set "ISODRIVE=%ISODRIVE%:"
echo ISO gemountet als Laufwerk %ISODRIVE%

if not exist "%ISODRIVE%\setup.exe" (
    echo FEHLER: Das gemountete ISO-Laufwerk ist nicht wie erwartet lesbar.
    echo Erwartete Datei nicht gefunden: "%ISODRIVE%\setup.exe"
    powershell -NoProfile -Command "$p = [Environment]::GetEnvironmentVariable('SRCISO'); Dismount-DiskImage -ImagePath $p" >nul 2>nul
    pause >nul
    goto End
)

echo.
echo Dateien werden entpackt, bitte warten ...
echo Robocopy-Protokoll: "%ROBOLOG%"
echo.

del "%ROBOLOG%" /f /q >nul 2>nul

robocopy "%ISODRIVE%\." "%ISO%" *.* /E /R:1 /W:1 /XJ /TEE /LOG:"%ROBOLOG%"
set "ROBOCODE=%ERRORLEVEL%"

echo.
echo ISO wird wieder ausgehaengt ...
powershell -NoProfile -Command "$p = [Environment]::GetEnvironmentVariable('SRCISO'); Dismount-DiskImage -ImagePath $p" >nul 2>nul

if %ROBOCODE% GEQ 8 (
    echo.
    echo FEHLER: Beim Kopieren der Dateien aus der ISO ist ein Fehler aufgetreten.
    echo Robocopy-Fehlercode: %ROBOCODE%
    echo Siehe Protokoll:
    echo   "%ROBOLOG%"
    echo.
    pause >nul
    goto End
)

echo.

:: ------------------------------------------------------------
:: 3) Plausibilitaetspruefungen
:: ------------------------------------------------------------
if not exist "%ISO%\efi\microsoft\boot\memtest.efi" (
    echo FEHLER: Die Windows-Installationsdateien scheinen unvollstaendig zu sein.
    echo Erwartete Datei fehlt:
    echo   "%ISO%\efi\microsoft\boot\memtest.efi"
    pause >nul
    goto AskExtractPath
)

if not exist "%ISO%\boot\etfsboot.com" (
    echo FEHLER: Bootdatei fuer BIOS fehlt:
    echo   "%ISO%\boot\etfsboot.com"
    pause >nul
    goto AskExtractPath
)

if not exist "%ISO%\efi\microsoft\boot\efisys.bin" if not exist "%ISO%\efi\microsoft\boot\efisys_noprompt.bin" (
    echo FEHLER: UEFI-Bootdatei fehlt:
    echo   "%ISO%\efi\microsoft\boot\efisys.bin"
    echo oder
    echo   "%ISO%\efi\microsoft\boot\efisys_noprompt.bin"
    pause >nul
    goto AskExtractPath
)

:: ------------------------------------------------------------
:: 4) Optional: noprompt-Dateien aktivieren
:: ------------------------------------------------------------
if exist "%ISO%\efi\microsoft\boot\cdboot_noprompt.efi" (
    if not exist "%ISO%\efi\microsoft\boot\cdboot-prompt.efi" (
        echo Benenne UEFI-Bootdateien fuer "no prompt" um ...
        ren "%ISO%\efi\microsoft\boot\cdboot.efi" "cdboot-prompt.efi" >nul 2>nul
        ren "%ISO%\efi\microsoft\boot\cdboot_noprompt.efi" "cdboot.efi" >nul 2>nul
    )
)

if exist "%ISO%\efi\microsoft\boot\efisys_noprompt.bin" (
    if not exist "%ISO%\efi\microsoft\boot\efisys_prompt.bin" (
        ren "%ISO%\efi\microsoft\boot\efisys.bin" "efisys_prompt.bin" >nul 2>nul
        ren "%ISO%\efi\microsoft\boot\efisys_noprompt.bin" "efisys.bin" >nul 2>nul
    )
)
cls
echo.
echo ============================================================================
echo.
echo   Die Installationsdateien sind jetzt entpackt und vorbereitet.
echo.
echo   Sie koennen nun manuelle Anpassungen vornehmen, z.B.:
echo.
echo     - Treiber hinzufuegen
echo     - autounattend.xml oder unattend.xml einfuegen
echo     - Dateien austauschen oder Skripte ergaenzen
echo     - Images mit DISM bearbeiten
echo.
echo   Entpackter Ordner:
echo     "%ISO%"
echo.
echo   Wenn Sie mit allen Anpassungen fertig sind, geben Sie bitte zur
echo   Sicherheit exakt folgende Freigabe ein:
echo.
echo     JETZT ISO BAUEN
echo.
echo   Nur dann wird die ISO-Erstellung fortgesetzt.
echo.
echo ============================================================================

:WaitForContinue
set "CONTINUECODE="
set /p "CONTINUECODE=Freigabe eingeben: "

if /I "%CONTINUECODE%"=="JETZT ISO BAUEN" goto ContinueIsoBuild

echo.
echo Falsche Eingabe. Das Skript wird noch nicht fortgesetzt.
echo Bitte geben Sie exakt ein:
echo   JETZT ISO BAUEN
echo.
goto WaitForContinue

:ContinueIsoBuild
echo.
echo Erstelle ISO, bitte warten ...
echo.

:: ------------------------------------------------------------
:: 5) ISO erstellen
:: ------------------------------------------------------------
echo Der Virenschutz wird de-aktiviert
echo bitte warten ...
powershell.exe -command "Set-MpPreference -DisableRealtimeMonitoring $true"
powershell.exe -command "Set-MpPreference -MAPSReporting Disabled"
powershell.exe -command "Set-MpPreference -SubmitSamplesConsent NeverSend"
powershell.exe -command "Set-MpPreference -DisableIntrusionPreventionSystem $true"
powershell.exe -command "Set-MpPreference -DisableIOAVProtection $true" 
powershell.exe -command "Set-MpPreference -DisableScriptScanning $true"
powershell.exe -command "Set-MpPreference -EnableControlledFolderAccess Disabled"
powershell.exe -command "Set-MpPreference -EnableNetworkProtection Disabled" 
powershell.exe -command "Set-MpPreference -ScanOnlyIfIdleEnabled $false"
powershell.exe -command "Set-MpPreference -DisableRemovableDriveScanning $true"
powershell.exe -command "Set-MpPreference -DisableEmailScanning $true" 
powershell.exe -command "Set-MpPreference -PUAProtection Disabled"
powershell.exe -command "Set-MpPreference -PerformanceModeStatus disabled" 

echo Energiesparplan "Höchstleistung" (High Performance) setzen
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c

"%OSCDIMG_EXE%" -m -o -u2 -udfver102 -bootdata:2#p0,e,b"%ISO%\boot\etfsboot.com"#pEF,e,b"%ISO%\efi\microsoft\boot\efisys.bin" "%ISO%" "%ISOFILE%"
if errorlevel 1 (
    echo.
    echo FEHLER: Die ISO konnte nicht erstellt werden.
    pause >nul
    goto End
)

echo.
echo Fertig.
echo ISO erfolgreich erstellt:
echo   "%ISOFILE%"
echo.
pause
goto End

:: ------------------------------------------------------------
:: Unterprogramme
:: ------------------------------------------------------------
:BuildIsoFile
if "%OUTDIR:~-1%"=="\" (
    set "ISOFILE=%OUTDIR%%VMName%.iso"
) else (
    set "ISOFILE=%OUTDIR%\%VMName%.iso"
)
exit /b 0

:ValidateIsoName
set "CHECKNAME=%~1"
if not defined CHECKNAME (
    echo FEHLER: Kein ISO-Name angegeben.
    pause >nul
    exit /b 1
)

set "PS_NAME=%CHECKNAME%"

powershell -NoProfile -Command ^
    "$n = [Environment]::GetEnvironmentVariable('PS_NAME');" ^
    "if ([string]::IsNullOrWhiteSpace($n)) { exit 1 }" ^
    "if ($n.Trim() -ne $n) { exit 1 }" ^
    "if ($n -in '.', '..') { exit 1 }" ^
    "if ($n -match '[\\/:*?""<>|]') { exit 1 }" ^
    "$reserved = 'CON','PRN','AUX','NUL','COM1','COM2','COM3','COM4','COM5','COM6','COM7','COM8','COM9','LPT1','LPT2','LPT3','LPT4','LPT5','LPT6','LPT7','LPT8','LPT9';" ^
    "if ($reserved -contains $n.ToUpperInvariant()) { exit 1 }" ^
    "exit 0"

if errorlevel 1 (
    echo FEHLER: Der ISO-Name ist ungueltig.
    echo.
    echo Nicht erlaubt:
    echo   - leerer Name
    echo   - fuehrende oder abschliessende Leerzeichen
    echo   - . oder ..
    echo   - Zeichen \ / : * ? ^" ^< ^> ^|
    echo   - reservierte Namen wie CON, PRN, AUX, NUL, COM1, LPT1
    pause >nul
    exit /b 1
)

exit /b 0

:ClearFolder
set "TARGETFOLDER=%~1"
if "%TARGETFOLDER%"=="" exit /b 1
if not exist "%TARGETFOLDER%\" exit /b 1

if /I "%TARGETFOLDER%"=="C:\" exit /b 1
if /I "%TARGETFOLDER%"=="C:" exit /b 1
if /I "%TARGETFOLDER%"=="D:\" exit /b 1
if /I "%TARGETFOLDER%"=="D:" exit /b 1
if /I "%TARGETFOLDER%"=="%SystemDrive%\" exit /b 1
if /I "%TARGETFOLDER%"=="%SystemDrive%" exit /b 1

del /f /s /q "%TARGETFOLDER%\*" >nul 2>nul
for /d %%D in ("%TARGETFOLDER%\*") do rd /s /q "%%~fD" >nul 2>nul

set "LEFTCOUNT=0"
for /f %%A in ('dir /a /b "%TARGETFOLDER%" 2^>nul ^| find /c /v ""') do set "LEFTCOUNT=%%A"
if not "%LEFTCOUNT%"=="0" exit /b 1

exit /b 0

:FindOscdimg
set "OSCDIMG_EXE="

for /f "delims=" %%I in ('where oscdimg.exe 2^>nul') do (
    if exist "%%~fI" (
        set "OSCDIMG_EXE=%%~fI"
        goto :eof
    )
)

for /f "delims=" %%I in ('dir /b /s "%LOCALAPPDATA%\Microsoft\WinGet\Packages\oscdimg.exe" 2^>nul') do (
    if exist "%%~fI" (
        set "OSCDIMG_EXE=%%~fI"
        goto :eof
    )
)

for /f "delims=" %%I in ('dir /b /s "%LOCALAPPDATA%\Microsoft\WinGet\Links\oscdimg.exe" 2^>nul') do (
    if exist "%%~fI" (
        set "OSCDIMG_EXE=%%~fI"
        goto :eof
    )
)

for /f "delims=" %%I in ('dir /b /s "%ProgramFiles(x86)%\Windows Kits\*\Assessment and Deployment Kit\Deployment Tools\*\Oscdimg\oscdimg.exe" 2^>nul') do (
    if exist "%%~fI" (
        set "OSCDIMG_EXE=%%~fI"
        goto :eof
    )
)

for /f "delims=" %%I in ('dir /b /s "%ProgramFiles%\Windows Kits\*\Assessment and Deployment Kit\Deployment Tools\*\Oscdimg\oscdimg.exe" 2^>nul') do (
    if exist "%%~fI" (
        set "OSCDIMG_EXE=%%~fI"
        goto :eof
    )
)

goto :eof

:no_internet
Echo leider keine OSCDIMG.exe vorhanden und/oder keine Internetverbindung möglich
Echo bitte zunächst OSCDIMG installieren / Internetverbindung prüfen!!
pause >nul

goto End


:End
endlocal
echo Der Virenschutz wird wieder aktiviert
echo bitte warten ...
powershell.exe -command "Set-MpPreference -DisableRealtimeMonitoring $false"
powershell.exe -command "Set-MpPreference -MAPSReporting Advanced"
powershell.exe -command "Set-MpPreference -SubmitSamplesConsent SendAllSamples"
powershell.exe -command "Set-MpPreference -DisableIntrusionPreventionSystem $false"
powershell.exe -command "Set-MpPreference -DisableIOAVProtection $false" 
powershell.exe -command "Set-MpPreference -DisableScriptScanning $false"
powershell.exe -command "Set-MpPreference -EnableControlledFolderAccess Enabled"
powershell.exe -command "Set-MpPreference -EnableNetworkProtection Enabled" 
powershell.exe -command "Set-MpPreference -ScanOnlyIfIdleEnabled:$false"
powershell.exe -command "Set-MpPreference -DisableRemovableDriveScanning:$false"
powershell.exe -command "Set-MpPreference -DisableEmailScanning:$false" 
powershell.exe -command "Set-MpPreference -PUAProtection Enabled"

Echo Der Windows-Energieplan "Ausbalanciert" (Balanced) wird eingestellt
powercfg /setactive 381b4222-f694-41f0-9685-ff5bb260df2e
exit /b
oder hier als Download:
oscdimg2.zip
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Gast2025

Re: ISO erstellen mit OSCDIMG und meinem Script [HowTo}

Beitrag von Gast2025 » 06.04.2026, 09:08

Benötigten Speicherplatz für zu erstellende Windows 10 oder 11 Iso berechnen

Für das Erstellen und die Verwendung einer Windows 11 ISO-Datei sollten Sie vorsorglich folgende neötigte Speicherplatzkapazitäten einplanen:

Größe der ISO-Datei selbst:
Die heruntergeladene ISO-Datei ist mittlerweile typischerweise etwa 8,3 GB GB bis ....? GB groß.
Tatsächlich aber abhängig von der dafür eigens heruntergeladenen Version

Beispiele sind sehr beliebte Isos von Birkuli (xxx ISO / ESD (deutsch, english))
wie die Multiversionen, Zero Edition Projekt, Unbreaked
sowie Beta oder Canary Versionen.
Hier stehen die Download- Größen im Threat der letzten Veröffentlichung

Temporärer Speicherplatz beim Erstellen:
Beim Download über das Media Creation Tool wird erfahrungsgemäß zusätzlicher Platz benötigt,
Man plant hierfür sicherheitshalber insgesamt 10–15 GB freien Speicherplatz auf der Festplatte ein.

Werden dem entpackten ISO noch Treiber usw. zugefügt bzw. mit eingepflegt,
dann sollte der Speicherplatz mit der oscdimg.exe im Verhältnis 1:1 passen.
Plus Puffergröße - bevor der "Rote Balken" im Explorer erscheint.

Die Größte zu bearbeitenden Datei ist die install.wim.

Die Abfrage richtet sich nach dem zu erstellendem Medium plus Sicherheits- Puffer
If then else
bzw.
freien festplattenspeicher mit cmd oder powershell ermitteln
Schnellste Methode (Freier Speicher in Byte):
fsutil volume diskfree c:
Übersicht aller Laufwerke (Größe & Frei):
wmic logicaldisk get size,freespace,caption

Übersicht aller Laufwerke (in GB):
Get-PSDrive -PSProvider FileSystem | Select-Object Name, @{Name="Free(GB)";Expression={$_.Free/1GB -as [int]}}

Würde ergeben = Pfadangabe für die zu erstellende ISO (wenn mehrere Partitionen)
Dann käme das if not mkdir wieder zum tragen

Kann gerne von Moderator überarbeitet werden
Janz Herzliche Grüße

Benutzeravatar
Holgi
Guru
Guru
Beiträge: 3976
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 523 Mal
Danke erhalten: 816 Mal
Gender:

Re: ISO erstellen mit OSCDIMG und meinem Script [HowTo}

Beitrag von Holgi » 06.04.2026, 09:49

@Gast2025
leider nicht zuEnde gedacht:
Die BasisISO wird heruntergeladen. Deren Größe steht fest.
Dann wird sie mit Robocopy auf die Festplatte kopiert und dort bearbeitet. Dann können Daten in Größe XXX hinzukommen (Treibersammlungen etc.). Die spätere Größe des Ordners hat mit der BasisISO nichts zu tun. Es müßte theoretisch dessen Größe berechnet werden (Y), bevor die neue ISO erstellt wird. Dabei noch der gerade freie Festplattenspeicher + Spare (X).
Wenn X-Y >0 dann o.k.
ISO Größe und Ordner Größe kommen wohl meistens so überein. Da sehe ich keinen bedeutsamen Unterschied.
Wenn du das jetzt so in das vorhandene Script mit Code umsetzen kannst. dann wäre das ein konstruktiver Beitrag.
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Antworten