A PowerShell toolkit for managing a Ventoy USB drive ISO library. Includes scripts to automatically organise ISOs into a structured directory tree by OS, version, and architecture, parsing filenames across 150+ distributions and tools spanning every major Linux family, BSD variants, Windows, hypervisors, network appliances, and rescue utilities. Also generates a ventoy.json boot menu grouped by OS family and bulk-downloads the latest releases via wget for distributions with stable public URLs. Ventoy Extras does not require Ventoy itself to be installed and works on any directory structure, making the scripts useful standalone regardless of how you boot your ISOs.
Find a file
Laurence Horrocks-Barlow 74b210a702 Add README, runbook, per-script docs, CHANGELOG and LICENSE.
Documents the organise-isos and generate-ventoy-json workflow end-to-end:
quick start in the README, full procedure with troubleshooting and recovery
in docs/RUNBOOK.md, and reference docs for each script covering parameters,
parsing rules, category groupings, and extensibility. Ships a YOLO licence
(no warranty) and seeds CHANGELOG.md for the v0.1.0 release.
2026-05-21 10:33:10 +01:00
docs Add README, runbook, per-script docs, CHANGELOG and LICENSE. 2026-05-21 10:33:10 +01:00
CHANGELOG.md Add README, runbook, per-script docs, CHANGELOG and LICENSE. 2026-05-21 10:33:10 +01:00
generate-ventoy-json.ps1 New script to generate ventoy's menu system. 2026-05-21 10:14:58 +01:00
LICENSE Add README, runbook, per-script docs, CHANGELOG and LICENSE. 2026-05-21 10:33:10 +01:00
organise-isos.ps1 Initial commit 2026-05-21 09:54:35 +01:00
README.md Add README, runbook, per-script docs, CHANGELOG and LICENSE. 2026-05-21 10:33:10 +01:00

ventoy-extras

PowerShell helpers for keeping a tidy Ventoy USB drive. Drops a pile of randomly-named ISOs into a sensible directory tree, then generates a categorised ventoy.json so the boot menu groups them by OS family instead of vomiting one flat list.

Two scripts, no dependencies beyond Windows PowerShell 5.1 (or PowerShell 7+).

Scripts

Script Purpose
organise-isos.ps1 Parse ISO filenames, infer os/version/arch, move into iso-library\<os>\<version>\<arch>\
generate-ventoy-json.ps1 Walk that tree and emit ventoy.json with a per-family submenu structure

Quick start

# 1. Drop all your downloaded ISOs into a working directory, then:
.\organise-isos.ps1 -SourceDir .\downloads -DestDir .\iso-library -DryRun
# Review the planned moves, then re-run without -DryRun
.\organise-isos.ps1 -SourceDir .\downloads -DestDir .\iso-library

# 2. Generate the ventoy menu config:
.\generate-ventoy-json.ps1 -IsoRoot .\iso-library -OutFile .\ventoy.json

# 3. Copy iso-library\ to the root of your Ventoy USB, and copy
#    ventoy.json into the ventoy\ folder on that same drive.

That's the whole workflow. See docs/RUNBOOK.md for the detailed operational walkthrough, and the per-script docs for the gory bits.

Documentation

Directory layout produced

iso-library\
  ubuntu\
    24.04\
      x86_64\
        ubuntu-24.04.1-desktop-amd64.iso
  debian\
    12\
      x86_64\
        debian-12.5.0-amd64-netinst.iso
  rocky\
    9\
      aarch64\
        Rocky-9.3-aarch64-minimal.iso
  ...

Three levels: OS slug, version, architecture. Ventoy follows directories transparently, so the same tree is what ends up on the USB.

Requirements

  • Windows PowerShell 5.1 or PowerShell 7+
  • A Ventoy USB drive (set up separately — see ventoy.net)
  • Enough disk space to hold your ISO collection twice during reorganisation

License

YOLO LICENSE — do whatever you want with it, no warranty, things may blow up.