VirtualBox Auto-Update Script für Windows (Winget)
- Holgi
- 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)
Es hat mich in letzter Zeit immer genervt, dass 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
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.
Code: Alles auswählen
Winget Upgrade --all
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
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
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
- Holgi
- 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)
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
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
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