#!/bin/bash # (c) Christopher Münzer DB InfraGo Betriebszentrale Duisburg USB_DEVICE="/dev/sda" # Ändern Sie dies zu Ihrem USB-Stick OUTPUT_ISO="windows_isbpn_$(date +%Y%m%d).iso" LOG="/tmp/log.txt" touch $LOG echo "1. Analysiere USB-Stick..." >> $LOG sudo fdisk -l "$USB_DEVICE" echo "2. Erstelle temporäre Verzeichnisse..." >> $LOG TEMP_DIR=$(mktemp -d) mkdir -p "$TEMP_DIR"/{mount1,mount2,iso} echo "3. Identifiziere Bootloader-Dateien..." >> $LOG # Boot-Sektor sichern (für BIOS-Boot) sudo dd if="$USB_DEVICE" of="$TEMP_DIR/bootsect.bin" bs=512 count=1 2>/dev/null echo "4. Mounte und kopiere Partitionen..." >> $LOG # Erste Partition mounten (normalerweise FAT32/EFI) PARTITION_COUNT=$(sudo fdisk -l "$USB_DEVICE" | grep "^/dev" | wc -l) if [ $PARTITION_COUNT -ge 1 ]; then echo " - Kopiere Partition 1..." >> $LOG sudo mount "${USB_DEVICE}1" "$TEMP_DIR/mount1" 2>/dev/null if mountpoint -q "$TEMP_DIR/mount1"; then sudo cp -r "$TEMP_DIR"/mount1/* "$TEMP_DIR/iso/" 2>/dev/null sudo umount "$TEMP_DIR/mount1" 2>/dev/null fi fi if [ $PARTITION_COUNT -ge 2 ]; then echo " - Kopiere Partition 2..." >> $LOG sudo mount "${USB_DEVICE}2" "$TEMP_DIR/mount2" 2>/dev/null if mountpoint -q "$TEMP_DIR/mount2"; then sudo cp -r "$TEMP_DIR"/mount2/* "$TEMP_DIR/iso/" 2>/dev/null sudo umount "$TEMP_DIR/mount2" 2>/dev/null fi fi echo "5. Suche nach Bootloader-Dateien..." >> $LOG # Typische Windows-Boot-Dateien BOOT_FILES=( "bootmgr" "bootmgr.efi" "efi/boot/bootx64.efi" "efi/boot/bootia32.efi" "efi/microsoft/boot/bootmgfw.efi" "boot/bcd" "boot/boot.sdi" ) BOOT_IMAGE="" for file in "${BOOT_FILES[@]}"; do if [ -f "$TEMP_DIR/iso/$file" ]; then echo " Gefunden: $file" if [[ "$file" == *.efi ]] || [[ "$file" == *.bin ]]; then BOOT_IMAGE="$file" fi fi done echo "6. Erstelle bootfähige ISO..." >> $LOG if [ -n "$BOOT_IMAGE" ]; then echo " Verwende Boot-Image: $BOOT_IMAGE" >> $LOG sudo genisoimage \ -b "$BOOT_IMAGE" \ -no-emul-boot \ -boot-load-size 8 \ -iso-level 3 \ -udf \ -allow-limited-size \ -J -l -D -N \ -joliet-long \ -relaxed-filenames \ -o "$OUTPUT_ISO" \ "$TEMP_DIR/iso" else echo " Kein Boot-Image gefunden, erstelle nicht-bootfähige ISO..." >> $LOG sudo genisoimage \ -iso-level 3 \ -udf \ -allow-limited-size \ -J -l -D -N \ -joliet-lo ng \ -relaxed-filenames \ -o "$OUTPUT_ISO" \ "$TEMP_DIR/iso" echo " Hinweis: ISO ist nicht bootfähig. Für bootfähige ISO müssen Sie:" echo " 1. Windows ADK auf einem Windows-System verwenden" echo " 2. Oder die originale Windows ISO mit Ihren Dateien neu erstellen" fi echo "7. Aufräumen..." >> $LOG sudo rm -rf "$TEMP_DIR" echo "8. Prüfe ISO..." >> $LOG if [ -f "$OUTPUT_ISO" ]; then echo "Fertig! ISO erstellt: $OUTPUT_ISO" >> $LOG echo "Größe: $(ls -lh "$OUTPUT_ISO" | awk '{print $5}')" # Teste ISO-Struktur echo "ISO-Struktur:" isoinfo -i "$OUTPUT_ISO" -l 2>/dev/null | head -20 || \ xorriso -indev "$OUTPUT_ISO" -toc 2>/dev/null | head -20 || \ echo "Kann ISO nicht lesen, aber Datei wurde erstellt." >> $LOG else echo "FEHLER: ISO wurde nicht erstellt!" >> $LOG fi