VirtualBox Auto-Update Script für Windows (Winget)

Du möchtest den Desktop oder die Apps schick machen? Deine Apps starten nicht oder lassen sich nicht installieren?
Antworten
Benutzeravatar
Holgi
Guru
Guru
Beiträge: 3388
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 435 Mal
Danke erhalten: 595 Mal
Gender:

VirtualBox Auto-Update Script für Windows (Winget)

Beitrag von Holgi » 14.09.2025, 20:49

Es hat mich in letzter Zeit immer genervt, dass

Code: Alles auswählen

Winget Upgrade --all
für VirtualBox ein Update anzeigt, aber dieses nicht installiert.
Angeblich soll dieses passieren, wenn VirtualBox selbst nicht mit Winget installiert wurde.
Also dachte ich mir: dann eben zukünftig mit Winget installieren. Wenn es aber schon installiert ist (.exe/.msi,) dann muss es erst mal wech. Das geht so oder so mit Winget.
Hat man mehrere PCs, dann bietet es sich an, diesen Vorgang zu automatisieren. Also wieder mal ein Script für den Script-Junkie.

Das unten stehende Script prüft die aktuelle Version von VirtualBox auf deren Servern, gleicht es mit einer ggf. installierten Version ab und wenn die installierte Version nicht der aktuellen Version entspricht, dann wird VB erst mit Winget de-installiert und später mit Winget neu installiert. Weil über Winget leider das VB Extension Pack nicht installiert werden kann, lasse ich es zumindest mit dem Script herunterladen, um es dann später aus dem geöffneten Programm heraus installieren zu können.
install_virtualbox_latest.ps1

Code: Alles auswählen

@Echo off
rem Dynamische Installation von Winget und Abhängigkeiten
chcp 1252 >nul 
setlocal enabledelayedexpansion

:: Bestimme das aktuelle Skriptverzeichnis
set "SCRIPT_DIR=%~dp0"

:: GitHub API URL
set "GITHUB_API=https://api.github.com/repos/microsoft/winget-cli/releases/latest"

:: Hole URLs direkt in Variablen
for /f "usebackq delims=" %%i in (`powershell -NoProfile -ExecutionPolicy Bypass -Command ^
    "$response = Invoke-RestMethod '%GITHUB_API%';" ^
    "$response.assets | Where-Object { $_.name -like '*DesktopAppInstaller_Dependencies.zip' } | Select-Object -ExpandProperty browser_download_url"`) do (
    set "DEPENDENCIES_URL=%%i"
)

for /f "usebackq delims=" %%i in (`powershell -NoProfile -ExecutionPolicy Bypass -Command ^
    "$response = Invoke-RestMethod '%GITHUB_API%';" ^
    "$response.assets | Where-Object { $_.name -like '*Microsoft.DesktopAppInstaller_*.msixbundle' } | Select-Object -ExpandProperty browser_download_url"`) do (
    set "WINGET_URL=%%i"
)

:: Überprüfe, ob URLs korrekt gefunden wurden
if "%DEPENDENCIES_URL%"=="" (
    echo Fehler: Konnte keine Download-URL für Abhängigkeiten finden!
    pause
    exit /b
)
if "%WINGET_URL%"=="" (
    echo Fehler: Konnte keine Download-URL für Winget finden!
    pause
    exit /b
)

:: Lokale Dateipfade setzen
set "DEPENDENCIES_ZIP=%SCRIPT_DIR%DesktopAppInstaller_Dependencies.zip"
set "DEPENDENCIES_FOLDER=%SCRIPT_DIR%DesktopAppInstaller_Dependencies"
set "WINGET_INSTALLER=%SCRIPT_DIR%MicrosoftDesktopAppInstaller_8wekyb3d8bbwe.msixbundle"

echo Lade Abhängigkeiten herunter...

:: Lade die Dateien herunter
powershell -command "Start-BitsTransfer -Source '%DEPENDENCIES_URL%' -Destination '%DEPENDENCIES_ZIP%'"
powershell -command "Start-BitsTransfer -Source '%WINGET_URL%' -Destination '%WINGET_INSTALLER%'"

:: Überprüfe, ob die Dateien existieren
if not exist "%DEPENDENCIES_ZIP%" (
    echo Fehler: Der Download der Abhängigkeiten ist fehlgeschlagen!
    pause
    exit /b
)
if not exist "%WINGET_INSTALLER%" (
    echo Fehler: Der Download von Winget ist fehlgeschlagen!
    pause
    exit /b
)

:: Stelle sicher, dass das Zielverzeichnis existiert
if not exist "%DEPENDENCIES_FOLDER%" mkdir "%DEPENDENCIES_FOLDER%"

:: Entpacken direkt in den gewünschten Ordner
echo Entpacke Abhängigkeiten in %DEPENDENCIES_FOLDER%...
powershell -command "Expand-Archive -Path '%DEPENDENCIES_ZIP%' -DestinationPath '%DEPENDENCIES_FOLDER%' -Force"

:: Falls ein doppelter Unterordner entstanden ist, korrigieren
if exist "%DEPENDENCIES_FOLDER%\DesktopAppInstaller_Dependencies\x64" (
    move "%DEPENDENCIES_FOLDER%\DesktopAppInstaller_Dependencies\x64" "%DEPENDENCIES_FOLDER%"
    rmdir /s /q "%DEPENDENCIES_FOLDER%\DesktopAppInstaller_Dependencies"
)

:: Sicherstellen, dass der x64-Ordner existiert
if not exist "%DEPENDENCIES_FOLDER%\x64" (
    echo Fehler: Der x64-Ordner mit den AppX-Paketen wurde nicht gefunden!
    pause
    exit /b
)

:: Abhängigkeiten installieren
echo Installiere Abhängigkeiten...

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
    "$files = Get-ChildItem -Path '%DEPENDENCIES_FOLDER%\x64' -Filter '*.appx' -Recurse;" ^
    "if ($files.Count -eq 0) { Write-Host 'Fehler: Keine AppX-Abhängigkeiten gefunden!'; exit 1 }" ^
    "else { foreach ($file in $files) { Add-AppXPackage -Path $file.FullName } }"

if %ERRORLEVEL% NEQ 0 (
    echo Fehler: Die Installation der Abhängigkeiten ist fehlgeschlagen!
    pause
    exit /b
)

:: Winget installieren
echo Installiere Winget...
powershell -command "Add-AppXPackage -Path '%WINGET_INSTALLER%'"

if %ERRORLEVEL% NEQ 0 (
    echo Fehler: Die Installation von Winget ist fehlgeschlagen!
    pause
    exit /b
)

echo Installation abgeschlossen.

CLS

del "%localAppData%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json" /f /q
echo ======================
echo konfiguriere Settings
echo ====================== & echo.

if exist "%localAppData%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json" del "%localAppData%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json" /f /q


@Echo off
(
Echo {
Echo    "$schema": "https://aka.ms/winget-settings.schema.json",

Echo    // For documentation on these settings, see: https://aka.ms/winget-settings
Echo "source": {
Echo    "autoUpdateIntervalInMinutes": 5
Echo  },

Echo "visual": {
Echo     "progressBar": "rainbow"
Echo  },


Echo  "experimentalFeatures": {
Echo     "uninstall": false,
Echo     "upgrade": false,
Echo     "list": false,
Echo     "experimentalMSStore": false
Echo  },

Echo "telemetry": {
Echo     "disable": true
Echo },

Echo "installBehavior": {
Echo     "preferences": {
Echo         "locale": [ "de-DE", "en-US" ]
Echo     }
Echo },

Echo "installBehavior": {
Echo     "preferences": {
Echo        "scope": "user"
Echo   }
Echo  }
Echo }

) > "%localAppData%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json"

cls

:: Winget testen
winget list --accept-source-agreements
timeout /t 10 >nul

:clear
rmdir %~dp0DesktopAppInstaller_Dependencies /s /q >nul
del %~dp0MicrosoftDesktopAppInstaller_8wekyb3d8bbwe.msixbundle /f >nul
del %~dp0DesktopAppInstaller_Dependencies.zip >nul
cd \
(goto) 2>nul&rd /s /q "%~dp0"
endlocal
exit

Achtung!! Das Script löscht ungefragt eure evtl. bestehende VirtualBox Installation (wenn diese nicht auf dem aktellen Stand ist). Ich habe das Script aber so geschrieben, dass es auch in einer Windows Sandbox mit installiertem Winget getestet werden kann.
Viel Spaß!
Konstruktive Verbesserungsvorschläge sind immer und gerne willkommen.
Zuletzt geändert von Holgi am 15.09.2025, 09:27, 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

VirtualBox Auto-Update Script für Windows (Winget)

Beitrag von Tante Google » 14.09.2025, 20:49


Benutzeravatar
Holgi
Guru
Guru
Beiträge: 3388
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 435 Mal
Danke erhalten: 595 Mal
Gender:

Re: VirtualBox Auto-Update Script für Windows (Winget)

Beitrag von Holgi » 14.09.2025, 23:11

auf vielfachen Wunsch:
mit diesem Script könnt ihr Winget in der Windows Sandbox installieren (als Vorbereitung für das VirtualBox Script):
Dynamische Installation von Winget und Dependencies.cmd

Code: Alles auswählen

@Echo off
rem Dynamische Installation von Winget und Abhängigkeiten
chcp 1252 >nul 
setlocal enabledelayedexpansion

:: Bestimme das aktuelle Skriptverzeichnis
set "SCRIPT_DIR=%~dp0"

:: GitHub API URL
set "GITHUB_API=https://api.github.com/repos/microsoft/winget-cli/releases/latest"

:: Hole URLs direkt in Variablen
for /f "usebackq delims=" %%i in (`powershell -NoProfile -ExecutionPolicy Bypass -Command ^
    "$response = Invoke-RestMethod '%GITHUB_API%';" ^
    "$response.assets | Where-Object { $_.name -like '*DesktopAppInstaller_Dependencies.zip' } | Select-Object -ExpandProperty browser_download_url"`) do (
    set "DEPENDENCIES_URL=%%i"
)

for /f "usebackq delims=" %%i in (`powershell -NoProfile -ExecutionPolicy Bypass -Command ^
    "$response = Invoke-RestMethod '%GITHUB_API%';" ^
    "$response.assets | Where-Object { $_.name -like '*Microsoft.DesktopAppInstaller_*.msixbundle' } | Select-Object -ExpandProperty browser_download_url"`) do (
    set "WINGET_URL=%%i"
)

:: Überprüfe, ob URLs korrekt gefunden wurden
if "%DEPENDENCIES_URL%"=="" (
    echo Fehler: Konnte keine Download-URL für Abhängigkeiten finden!
    pause
    exit /b
)
if "%WINGET_URL%"=="" (
    echo Fehler: Konnte keine Download-URL für Winget finden!
    pause
    exit /b
)

:: Lokale Dateipfade setzen
set "DEPENDENCIES_ZIP=%SCRIPT_DIR%DesktopAppInstaller_Dependencies.zip"
set "DEPENDENCIES_FOLDER=%SCRIPT_DIR%DesktopAppInstaller_Dependencies"
set "WINGET_INSTALLER=%SCRIPT_DIR%MicrosoftDesktopAppInstaller_8wekyb3d8bbwe.msixbundle"

echo Lade Abhängigkeiten herunter...

:: Lade die Dateien herunter
powershell -command "Start-BitsTransfer -Source '%DEPENDENCIES_URL%' -Destination '%DEPENDENCIES_ZIP%'"
powershell -command "Start-BitsTransfer -Source '%WINGET_URL%' -Destination '%WINGET_INSTALLER%'"

:: Überprüfe, ob die Dateien existieren
if not exist "%DEPENDENCIES_ZIP%" (
    echo Fehler: Der Download der Abhängigkeiten ist fehlgeschlagen!
    pause
    exit /b
)
if not exist "%WINGET_INSTALLER%" (
    echo Fehler: Der Download von Winget ist fehlgeschlagen!
    pause
    exit /b
)

:: Stelle sicher, dass das Zielverzeichnis existiert
if not exist "%DEPENDENCIES_FOLDER%" mkdir "%DEPENDENCIES_FOLDER%"

:: Entpacken direkt in den gewünschten Ordner
echo Entpacke Abhängigkeiten in %DEPENDENCIES_FOLDER%...
powershell -command "Expand-Archive -Path '%DEPENDENCIES_ZIP%' -DestinationPath '%DEPENDENCIES_FOLDER%' -Force"

:: Falls ein doppelter Unterordner entstanden ist, korrigieren
if exist "%DEPENDENCIES_FOLDER%\DesktopAppInstaller_Dependencies\x64" (
    move "%DEPENDENCIES_FOLDER%\DesktopAppInstaller_Dependencies\x64" "%DEPENDENCIES_FOLDER%"
    rmdir /s /q "%DEPENDENCIES_FOLDER%\DesktopAppInstaller_Dependencies"
)

:: Sicherstellen, dass der x64-Ordner existiert
if not exist "%DEPENDENCIES_FOLDER%\x64" (
    echo Fehler: Der x64-Ordner mit den AppX-Paketen wurde nicht gefunden!
    pause
    exit /b
)

:: Abhängigkeiten installieren
echo Installiere Abhängigkeiten...

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
    "$files = Get-ChildItem -Path '%DEPENDENCIES_FOLDER%\x64' -Filter '*.appx' -Recurse;" ^
    "if ($files.Count -eq 0) { Write-Host 'Fehler: Keine AppX-Abhängigkeiten gefunden!'; exit 1 }" ^
    "else { foreach ($file in $files) { Add-AppXPackage -Path $file.FullName } }"

if %ERRORLEVEL% NEQ 0 (
    echo Fehler: Die Installation der Abhängigkeiten ist fehlgeschlagen!
    pause
    exit /b
)

:: Winget installieren
echo Installiere Winget...
powershell -command "Add-AppXPackage -Path '%WINGET_INSTALLER%'"

if %ERRORLEVEL% NEQ 0 (
    echo Fehler: Die Installation von Winget ist fehlgeschlagen!
    pause
    exit /b
)

echo Installation abgeschlossen.

:: Winget testen
winget list --accept-source-agreements

timeout /t 10
endlocal
exit /b
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