# https://www.ventoy.net/en/doc_windows_cli.html # https://hedgedoc.itlabs.at/y4MtvCKURw2Om0zevkA5sQ?both # scripting $Ventoy = "C:\Users\pikit\Desktop\ventoy-1.1.05" $ISODateien = "C:\Users\pikit\Desktop\ventoy-itlabs\" Read-Host -Prompt "Diese Datei formattiert und setzt Ventoy auf USBs auf. Die USBs sollen den Drive D haben. !!Achtung!! USB wird formattiert! Daten werden unwiederruflich geloescht Druecke Enter um fortzufahren." Read-Host -Prompt "Bist du dir sicher?" # Liste der verfügbaren Laufwerke abrufen $drives = Get-WmiObject -Class Win32_LogicalDisk | Where-Object { $_.DriveType -eq 2 } | Select-Object -ExpandProperty DeviceID # Zeige die verfügbaren Laufwerke zur Auswahl an Write-Host "Verfuegbare USB-Laufwerke:" $counter = 1 foreach ($drive in $drives) { Write-Host "$counter. $drive" $counter++ } # Benutzer zur Auswahl auffordern $choice = Read-Host "Waehle eine USB aus (1-$counter)" # Überprüfe, ob die Eingabe gültig ist if ($choice -ge 1 -and $choice -le $drives.Count) { $selectedDrive = $drives[$choice - 1] Write-Host "Du hast Laufwerk $selectedDrive gewaehlt." # Ventoy2Disk Befehl mit dem gewählten Laufwerk ausführen & "$Ventoy\Ventoy2Disk.exe" "VTOYCLI" "/I" "/Drive:$selectedDrive" } else { Write-Host "Ungueltige Auswahl. Bitte waehlen Sie eine gueltige Zahl." } Start-Sleep -seconds 1.5 do { $progress = Get-Content "$Ventoy\cli_percent.txt" Write-Host "`rFortschritt: $progress%" -NoNewline Start-Sleep -Milliseconds 250 } while ($progress -ne "100") Write-Host " " get-content "$Ventoy\cli_done.txt" Write-Host " " Write-Host $selectedDrive Read-Host -Prompt "0 = success 1 = fail Druecke enter um forzufahren. Eine Ventoy Theme wird vom git heruntergeladet." # Bei 1 usb: selectedDrive wird als nur "D" angezeigt und muss ":" hinzugefügt werden. # Bei mehreren USB: selectedDrive wird als "D:" angezeigt und muss kein ":" hinzugefügt werden! $selectedDrive = $selectedDrive + ":" $repoPath = "$selectedDrive\Theme\" $gitRepoUrl = "https://git.itlabs.at/neko/ventoy-itlabs.git" # Prüfen, ob das Repository schon existiert (nicht mehr nötig, aber werde ich nicht abändern) if (Test-Path "$repoPath\.git") { Write-Host "Repository existiert bereits. Aktualisiere..." Set-Location $repoPath git pull } else { Write-Host "Repository nicht gefunden. Klone das Theme-Repo..." git clone $gitRepoUrl $repoPath } Write-Host " " if (Test-Path $repoPath) { Write-Host -Prompt "Theme erfolgreich heruntergeladen!" Write-Host " " # .git-Ordner entfernen $gitFolder = "$repoPath\.git" if (Test-Path $gitFolder) { Remove-Item -Recurse -Force $gitFolder Write-Host ".git-Ordner wurde geloescht." } Write-Host " " # Alle Dateien aus dem Theme-Ordner direkt nach $selectedDrive\ verschieben Get-ChildItem -Path $repoPath -Recurse | Move-Item -Destination "$selectedDrive\" -Force # Ursprünglichen Theme-Ordner löschen Remove-Item -Recurse -Force $repoPath Write-Host "Theme wurde nach $selectedDrive\ verschoben und der urspruengliche Ordner wurde geloescht." } else { Write-Host "Fehler: Das Theme konnte nicht heruntergeladen werden!" exit 1 } Write-Host " " # man kann erkennen, das nicht alles mit KI erstellt wurde, da die formattierung so schlecht ist # update: alles mit KI geschrieben :( Read-Host -Prompt "Druecke Enter um ISO-Dateien vom ..\Desktop\ISO-Dateien zu kopieren. Achtung! Kann lange dauern! " # das ist schlecht und hässlich, könnte man verbessen $sourcePath = "$ISODateien" $sourcePathW = "$sourcePath\1 Windows" $sourcePathL = "$sourcePath\2 Linux" $sourcePathO = "$sourcePath\3 Others" $sourcePathU = "$sourcePath\4 Utilities" $targetPathW = "$selectedDrive\1 Windows" $targetPathL = "$selectedDrive\2 Linux" $targetPathO = "$selectedDrive\3 Others" $targetPathU = "$selectedDrive\4 Utilities" # schaut nach ob es die ordner gibt, das kann auch besser sein if (!(Test-Path $sourcePath)) { Write-Host "Fehler: Der Quellordner existiert nicht." -ForegroundColor Red exit 1 } if (!(Test-Path $sourcePathW)) { Write-Host "Fehler: Der Ordner 1 Windows existiert nicht." -ForegroundColor Red exit 1 } if (!(Test-Path $sourcePathL)) { Write-Host "Fehler: Der Ordner 2 Linux existiert nicht." -ForegroundColor Red exit 1 } if (!(Test-Path $sourcePathO)) { Write-Host "Fehler: Der Ordner 3 Others existiert nicht." -ForegroundColor Red exit 1 } if (!(Test-Path $sourcePathU)) { Write-Host "Fehler: Der 4 Utilities existiert nicht." -ForegroundColor Red exit 1 } # if (!(Test-Path $targetPathW)) { Write-Host "Fehler: Der Zielordner 1 Windows existiert nicht." -ForegroundColor Red exit 1 } if (!(Test-Path $targetPathL)) { Write-Host "Fehler: Der Zielordner 2 Linux existiert nicht." -ForegroundColor Red exit 1 } if (!(Test-Path $targetPathO)) { Write-Host "Fehler: Der Zielordner 3 Others existiert nicht." -ForegroundColor Red exit 1 } if (!(Test-Path $targetPathU)) { Write-Host "Fehler: Der Zielordner 4 Utilities existiert nicht." -ForegroundColor Red exit 1 } # erstellt eine funktion die ein prozent der kopierten Dateien angibt und angibt, welche datei kopiert wird. function Copy-FilesWithProgress { param ( [string]$source, [string]$target ) # Alle ISO-Dateien im Quellordner holen $files = Get-ChildItem -Path $source -Filter "*.iso" $totalFiles = $files.Count $counter = 0 if ($totalFiles -eq 0) { Write-Host "Keine ISO-Dateien in $source gefunden." return } foreach ($file in $files) { $destinationPath = Join-Path -Path $target -ChildPath $file.Name # Prüfen, ob Datei bereits existiert und gleich groß ist if (Test-Path $destinationPath) { $sourceSize = (Get-Item $file.FullName).Length $destSize = (Get-Item $destinationPath).Length if ($sourceSize -eq $destSize) { Write-Host "Überspringe: $($file.Name) (bereits vorhanden)" $counter++ continue } } # Datei kopieren Write-Host "Kopiere: $($file.Name)" Copy-Item -Path $file.FullName -Destination $destinationPath -Force # Fortschritt berechnen und anzeigen $counter++ $progressPercent = [math]::Round(($counter / $totalFiles) * 100, 2) Write-Host "`rFortschritt: $progressPercent%" -NoNewline } Write-Host " Fertig mit $source -> $target!" } # Kopiervorgang starten # wird one-by-one kopiert Copy-FilesWithProgress -source $sourcePathW -target $targetPathW Copy-FilesWithProgress -source $sourcePathL -target $targetPathL Copy-FilesWithProgress -source $sourcePathO -target $targetPathO Copy-FilesWithProgress -source $sourcePathU -target $targetPathU Write-Host " " Write-Host "`nAlle Dateien wurden kopiert!" Write-Host " " Read-Host -Prompt "Druecke Enter zum Beenden." # bei bearbeiten beachten: skript wurde für einen windows laptop erstellt und the pfade müssen abgeändert werden! # update: mit variablen ganz am anfang des Skriptes kann man das leicht ändern # von Andraz Robin und Lucas Tscharf am 17/03/202566666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666