blog.bartlweb - a technologist's external brain

Automatische Installation von Software via winget in der Windows Sandbox

Windows bringt seiner einiger Zeit ein sehr nützliches Feature Sandbox mit sich. Ich nutze die Sandbox für das Testen von Sofware, da der Zustand bei jedem Start auf eine frische Windows-Installation zurückgesetzt wird. Für einige Use Cases kann es aber sinnvoll sein, ein gewisse Basisinstallation an Software in der Sandbox zu Verfügung zu haben. Das Zurücksetzen der Sandbox lässt sich nicht verhindern, aber die Installation von Software bei jedem Start automatisieren. Dazu wird auf winget - ein Paketmanager für Windows - zurückgegriffen. Durch Konfigurationsdateien können hier individuelle Sets an automatischen Installationsskripten für unterschiedliche Zwecke erstellt und bei Bedarf gestartet werden.

Sandbox Konfigurationsdatei

Die Datei sanbox.wsb definiert eine Konfiguration, die beim Start auf die Sandbox angewandt wird. Eine Konfigurationsdatei ist ausführbar und startet direkt die entsprechend konfigurierte Sandbox-Umgebung.

Im folgenden Skript wird ein Ordner auf dem PC als HostFolder definiert, der in der Sandbox unter einem definierten Pfad SandboxFolder bereitgestellt wird. Dieser Order wird benötigt, um das Installationsskript und die Installationsdateien zwischenzuspeichern und beherbergt damit auch das unten angeführte Hilfsskript und Installationsskript. Dieser eine lokale Order auf dem PC, fasst somit eine Konfiguration zusammen und hat zusätzlich den Vorteil, dass die Installationsdateien für winget nicht bei jedem Start erneut heruntergeladen werden müssen.

<Configuration>
	<MappedFolders>
	  <MappedFolder> 
		<HostFolder>C:\Sandbox\MyPersonalBox</HostFolder> 
		<SandboxFolder>C:\autodeploy</SandboxFolder> 
		<ReadOnly>false</ReadOnly> 
	  </MappedFolder>
	</MappedFolders>
	<LogonCommand>
	  <Command>C:\autodeploy\run.cmd</Command>
	</LogonCommand>
</Configuration>

Hilfsskript zum Ausführen des Installationsskripts

Die Datei run.cmd ist ein Hilfsskript, dass das eigentliche PowerShell-Installationsskript in der Sandbox ausführt.

start powershell.exe -executionpolicy unrestricted -windowstyle normal -noexit -file C:\autodeploy\install.ps1

Installationsskript

Die Datei install.ps1 ist das eigentliche Installationsskript, das zunächst winget in der Sandbox installiert und danach die aktuellste Version der gewünschten Software via winget lädt und installiert. Im ersten Teil wird winget selbst installiert, dieser bleibt somit immer unverändert. Im zweiten Teil folgen 1-n Befehle zum Installieren von Software via winget.

## ################################################################################################################
## install winget
## reference for needed dependencies: https://github.com/microsoft/winget-pkgs/blob/master/Tools/SandboxTest.ps1
##

cd C:\autodeploy
If (-Not(Test-Path -Path .\uixaml.appx)) {
    Invoke-WebRequest -outfile .\uixaml.appx "https://github.com/microsoft/microsoft-ui-xaml/releases/download/v2.8.6/Microsoft.UI.Xaml.2.8.x64.appx"
}
If (-Not(Test-Path -Path .\vclibs.appx)) {
    Invoke-WebRequest -outfile .\vclibs.appx https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx 
}
If (-Not(Test-Path -Path .\winget.msixbundle)) {
    Invoke-WebRequest -outfile .\winget.msixbundle https://aka.ms/getwinget
}
Add-AppxPackage .\uixaml.appx
Add-AppxPackage .\vclibs.appx
Add-AppxPackage .\winget.msixbundle


## ################################################################################################################
## install custom software
## find package names for winget via https://winget.run/
##

winget install --accept-package-agreements --accept-source-agreements mozilla.firefox

Dieser Artikel hat Dir deinen Tag gerettet?

... und mühevolles Probieren, Recherchieren und damit Stunden an Zeit gespart? Oder einfach nur Dein Problem gelöst?

Dann würde ich mich freuen, wenn Du meine Zeit für die Erstellung dieses Blogartikels mit einer kleinen Anerkennung honorierst:

Zahlung mit PayPal oder Kreditkarte.

Hinweis zur Verwendung

Die Übermittlung einer Zahlung ist eine persönliche Anerkennung Ihrerseits an den Entwickler (Christian Bartl, Privatperson). Eine Zahlung ist nicht zweckgebunden und es ist keine Gegenleistung zu erwarten. Bitte beachten Sie, dass für eine übermittelte Zahlung keine Quittung ausgestellt werden kann.

Über den Autor

Christian Bartl

Christian Bartl Requirements Engineer
& Solution Architect für Online und Mobile

Als Technologie-Enthusiast und begeisterter Programmierer entwickle ich in meiner Freizeit Websites, Software und IT-Lösungen, die mir selbst und anderen den Alltag vereinfachen.

mehr auf christian.bartl.me

Kommentare

Noch kein Kommentar vorhanden.
Sei der Erste! - Ich freue mich über deine Anmerkung, Kritik oder Frage.

Kommentar schreiben

Der hier angegebene Name wird gemeinsam mit deinem Kommentar auf der Website veröffentlicht.

Deine E-Mail-Adresse wird zur einmaligen Benachrichtigung bei Veröffentlichung des Kommentars genutzt.

Benachrichtigung per E-Mail über Antworten auf meinen Kommentar erhalten.

Bitte tippe die Zahlenkombination "2417" ein, nur dann kann ich deinen Kommentar entgegennehmen.

Bitte fülle dieses Feld nicht aus, nur dann kann ich deinen Kommentar entgegennehmen.