Schriftgröße: +
7 minutes reading time (1397 words)

PowerShell-Befehle für Modern-Applications in Windows

MSIX_und_PowerShell

In diesem Artikel zeige ich Ihnen, welche PowerShell-Befehle Sie benötigen, um moderne Anwendungen wie AppX und MSIX auf Windows 11 und Windows Server bereitzustellen. Wir sprechen in diesem Zusammenhang von Modern-Applications, die isoliert, also virtuell, mit eigenem Dateisystem und eigener Registrierung unter Windows arbeiten.  

Einführung

AppX- und MSIX-Anwendungen (sowie Package-Bundles wie .appxbundle und -msixbundle) können unter Windows 11 per Doppelklick bereitgestellt werden. Daraufhin erscheint ein Dialog zur Installation, wie man ihn von klassischen MSI-Paketen kennt. Im Hintergrund läuft zur Installation immer ein PowerShell-Befehl, der die Bereitstellung erledigt.

Microsoft MSIX AppInstaller Dialog

Auf Windows Servern sieht die Sache jedoch ganz anders aus. Je nach Version gibt es aktuell Serversysteme mit eingeschränkter Funktionalität. Aktuell bietet Server 2022 den größten Funktionsumfang für Modern-Applications. Anwendungen für den Server werden immer per PowerShell bereitgestellt.

Ich empfehle Ihnen, zur Erstellung von MISX-Paketen das Microsoft MSIX Packaging Tool im Store zu nutzen: https://apps.microsoft.com/detail/9n5lw3jbcxkf

Auf Windows Servern sieht die Sache anders aus. Je nach Version gibt es aktuell Serversysteme mit eingeschränkter Funktionalität. Der größte Funktionsumfang für die Modern-Applications ist aktuell zum Zeitpunkt der Erstellung dieses Artikels auf Server 2022 zu finden. Anwendungen für den Server werden immer per PowerShell bereitgestellt.

Weitere Infos dazu gibt es hier:

https://www.nick-it.de/blog/msix 

Modern Apps und PowerShell

Ihr könnt Euch leicht eine Übersicht verschaffen, welche PowerShell Befehle für Modern Applications unter Windows existieren.

Get-command -module appx

Beachten Sie, dass es für „appx" jeweils ein PowerShell-Alias auf „App" gibt, um die Nutzung der CmdLets zu erleichtern. Die Befehle sind absolut gleichwertig.

PS > Get-command -module appx

CommandTypeName

AliasAdd-AppPackage

CmdletAdd-AppxPackage

Anmerkung: Die Bereitstellung moderner Anwendungen erfolgt weitgehend „Per User". Die digitale Signatur stellt dabei die Integrität der Anwendung sicher. Daher sind Benutzerrechte für die meisten Befehle ausreichend. Ggf. muss die PowerShell-Ausführungsrichtlinie angepasst werden:

Set-ExecutionPolicy -ExecutionPolicy Remotesigned 

Was sind nun die wichtigsten CmdLets für MSIX und Appx? 

X Get-AppPackage zum Anzeigen von Anwendungspaketen

Mit Get-AppPackage sehen Sie auf einen Blick alle modernen Anwendungen, die Sie unter Windows installiert haben. Sie erhalten Informationen wie den Family Name und den Speicherort im AppCache (in der Regel unter c:\Program Files\WindowsApps). Sie können den Befehl auch mit einem Wildcard "*" für beliebige und beliebig viele Zeichen nutzen, zum Beispiel *paint*.

PS C:\> Get-AppPackage *microsoft.paint*

Name: Microsoft.Paint

Publisher: CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US

Architecture: X64

ResourceId:

Version: 11.2311.30.0

PackageFullName: Microsoft.Paint_11.2311.30.0_x64__8wekyb3d8bbwe

InstallLocation: C:\Program Files\WindowsApps\Microsoft.Paint_11.2311.30.0_x64__8wekyb3d8bbwe

IsFramework: False

PackageFamilyName : Microsoft.Paint_8wekyb3d8bbwe

PublisherId: 8wekyb3d8bbwe

IsResourcePackage : False

IsBundle: False

IsDevelopmentMode : False

NonRemovable: False

Dependencies: {Microsoft.VCLibs.140.00_14.0.33519.0_x64__8wekyb3d8bbwe, Microsoft.VCLibs.140.00.UWPDesktop_14.0.33728.0_x64__8wekyb3d8bbwe,

Microsoft.UI.Xaml.2.8_8.2310.30001.0_x64__8wekyb3d8bbwe, Microsoft.Paint_11.2311.30.0_neutral_split.language-de_8wekyb3d8bbwe...}

IsPartiallyStaged : False

SignatureKind: Store

Status: Ok

Eine Übersicht aller Anwendungen können wir generieren, wenn wir das Ergebnis auf den Namen filtern:

Get-AppPackage * | Select-Object -Property Name

Um die Menge zu sortieren und auf wenige Einträge einzuschränken nutzen wir Sort-Object und „-last x":

PS C:\> Get-AppPackage * | Sort-Object | Select-Object -Property Name -last 5

Name

----

TheLEGOGroup.LEGOMINDSTORMSInventor

Windows.CBSPreview

windows.immersivecontrolpanel

Windows.PrintDialog

WinRAR.ShellExtension

Hinweis: Mit dem Schalter "-AllUsers" werden Anwendungen angezeigt, die nicht für den aktuellen Anwender bereitgestellt sind.

Reparieren von Modern-Applications mit Reset-AppxPackage

Sie können eine Modern-Application mit dem Befehl "Reset-AppxPackage" reparieren. Damit setzen Sie den Zustand der Anwendung im Benutzerverzeichnis zurück. Die Anwendungsdaten werden unter %localappdata%/Packages/PackageID/ im Benutzerverzeichnis gespeichert. Sie müssen den Befehl mit Benutzerrechten im context des Benutzers ausführen, beispielsweise wenn eine Anwendung nicht mehr sauber funktioniert.

Get-AppPackage *microsoft.paint* | Reset-AppPackage

Deinstallieren einer Modern-Application

Mit dem Befehl "Remove-AppPackage" können Sie eine moderne Anwendung deinstallieren. Dabei ist zu beachten, dass dieser Befehl mit Anwenderrechten ausgeführt werden kann und eine Anwendung in der Regel im Anwendungscache unter C:\Program Files\Windows Apps verbleibt. Das bedeutet, dass Sie als Anwender diese Anwendung nicht mehr sehen können.

Nehmen wir zum Beispiel die Deinstallation von Paint:

Get-AppPackage *microsoft.paint* | Remove-AppPackage

Eine Deinstallation kann auch einfach durch den Anwender aus dem Startmenü heraus erfolgen. Dazu genügt ein Rechtsklick auf viele der Modern-Applications, wie beispielsweise Paint. Dort muss lediglich "Deinstall" angeklickt werden. Sollte dies einmal versehentlich passieren, kann eine solche Anwendung mit den Benutzerrechten des Anwenders auch wieder repariert werden.

Das passiert wiederum mit Add-AppPackag, beispielsweise für Paint:

Add-AppPackage -Path "C:\Program Files\WindowsApps\Microsoft.Paint_11.2311.30.0_x64__8wekyb3d8bbwe\AppxManifest.xml" -Register -DisableDevelopmentMode

Wichtig ist es hierbei auf den Ordner im PackageCache zu verweisen und auf die Datei AppXManifest.xml

  • -Path: Dieser Parameter gibt den Pfad zur Manifestdatei (AppxManifest.xml) der App an. Die Manifestdatei enthält Metadaten und Informationen über die App, die für die Installation oder Registrierung erforderlich sind. In diesem Fall liegt die Datei im Verzeichnis C:\Program Files\WindowsApps\SumatraPDFReader-x64_3.4.6.0_x64__5g7qmyvpqtbge\.
  • -Register: Dieser Schalter wird verwendet, um die App nicht neu zu installieren, sondern die vorhandene Installation im System zu registrieren. Dies ist besonders nützlich, wenn die App-Dateien bereits auf dem System vorhanden sind und nur die Registrierung in Windows erneuert oder korrigiert werden muss.
  • -DisableDevelopmentMode: Dieser Schalter deaktiviert den Entwicklungsmodus. Der Entwicklungsmodus ist normalerweise für Entwickler gedacht, die Apps testen und debuggen. Durch Deaktivieren des Entwicklungsmodus wird sichergestellt, dass die App in einem Produktionsmodus registriert wird, was für die meisten Endbenutzer-Szenarien geeignet ist.

Der Ordner kann mit Get-AppPackage und Select-Object ermittelt werden:

PS C:\> Get-AppPackage *microsoft.paint* | Select-Object -Property InstallLocation

C:\Program Files\WindowsApps\Microsoft.Paint_11.2311.30.0_x64__8wekyb3d8bbwe

Verhindern, dass Anwendungen deinstalliert werden

Anwendungen kennen den Schalter "Non-Removable". Anwendungen, die nicht durch den Anwender deinstalliert werden dürfen, können im System gesucht werden. Setzen Sie diesen Switch gezielt, um eine Deinstallation zu verhindern. Das Setzen dieses Schalters muss mit administrativen Rechten erfolgen.

Beispiel: Suchen von Anwendungen, die nicht deinstalliert werden können:

PS C:\> Get-AppPackage * | Where-Object -Property NonRemovable -eq $True | Select-Object -Property Name -First 10

Name

----

Microsoft.UI.Xaml.CBS

NcsiUwpApp

Microsoft.Windows.AssignedAccessLockApp

Microsoft.Windows.CallingShellApp

Microsoft.Windows.Apprep.ChxApp

Microsoft.Windows.ParentalControls

Microsoft.XboxGameCallableUI

Microsoft.Windows.PinningConfirmationDialog

Microsoft.MicrosoftEdgeDevToolsClient

Microsoft.UI.Xaml.CBS

Nun, beispielsweise Microsoft Paint ist eine Anwendung, die ein Anwender für sich deinstallieren darf, wie der folgende Befehl zeigt.

S C:\> Get-AppPackage *microsoft.paint* | Select-Object -Property name, NonRemovable

NameNonRemovable

----------------

Microsoft.PaintFalse

Verhindern der Deinstallation von Modern-Applications

Ändern Sie das Deinstallationsverhalten einer Anwendung mit dem PowerShell-Befehl "Set-NonRemovableAppsPolicy". Dieser Befehl stammt aus dem DISM-Modul. Hier sind Befehle enthalten, die sich auf das Windows WIM-Image beziehen. Der Befehl kennt den Switch "-Online". Dieser bezieht sich auf ein Windows-Image, das bereits installiert ist. Eine Änderung gilt somit für alle Anwender auf einem Computer.

Mit folgendem Befehl, der "als Administrator" ausgeführt werden muss, kann beispielsweise verhindert werden, dass Microsoft.Paint durch einen Anwender deinstalliert werden kann:

PS C:\Users\Andreas> Get-AppPackage *microsoft.Paint* -AllUsers | Set-NonRemovableAppsPolicy -Online -NonRemovable $true

Online: True
RestartNeeded : False

Installieren einer Anwendung für alle Anwender

Auch der Befehl "Add-AppxProvisionedPackage" aus dem Modul DISM ist dafür zuständig, eine Anwender-Installation für alle Anwender auf einem Computer vorzunehmen. Das Paket wird im Cache des Computers verankert. Der Befehl muss für ein laufendes System zwingend mit dem Switch "-Online" ausgeführt werden. Eine Integration in ein WIM-Image ist ebenfalls möglich, wobei der Parameter "-Online" dann natürlich nicht verwendet werden darf.

Dabei ist jedoch zu beachten, dass die Integration zwar auf dem Computer erfolgt, der Anwender diese Anwendung aber nicht unbedingt sieht. Im zweiten Schritt ist beispielsweise für FSLogix oder Roaming Profiles eine Registrierung im Benutzerprofil notwendig.

Als Beispiel hier die Installation des MISX Packaging Tools:

Add-AppxProvisionedPackage -PackagePath C:\temp\PackagingTool2023.12.12.0.msixbundle -Online-SkipLicense

Ein Lizenzpfad ist für Store-Anwendungen zwingend notwendig, wenn diese offline installiert werden soll. Als Beispiel sei hier "-LicensePath C:\temp\PackagingTool2023.12.12.0_License.xml" genannt. Eine Onlineverbindung ist ansonsten erforderlich und statt -LicensePath der Switch „SkripLicende". Das gilt nicht für MSIX-Pakete, die selbst erstellt wurden. Diese benötigen keine Lizenzdatei. Hier kann immer der Switch "-SkipLicense" genutzt werden. Der Switch "-Online" ist wiederum zwingend erforderlich für ein installiertes Windows System (also kein WIM Image).

Ein neuer Anwender muss sich beispielsweise mit einem Roaming Profile anmelden. Anschließend muss die Anwendung im Benutzerkontext registriert werden. Das gilt beispielsweise für das Packaging Tool. Der Befehl muss in ein Logon-Skript des Anwenders eingebaut werden.

PS > Add-AppPackage -Path"C:\Program Files\WindowsApps\
Microsoft.MSIXPackagingTool_1.2024.508.0_x64__8wekyb3d8bbwe\AppxManifest.xml"
-DisableDevelopmentMode -Register

Starten einer Anwendung im MSIX Container

Mit dem Befehl "Invoke-CommandInDesktopPackage" starten Sie eine Anwendung in eine virtuelle MSIX/AppX-Anwendung. Beispielsweise, um zu sehen, ob ein Add-On und eine Anwendung miteinander kompatibel sind, oder um eine Fehlerbehebung durchzuführen.

Dafür werden der PackageFamilyName (Get-AppPackage) und die AppID benötigt. Letztere ist im Application Tag des AppxManifests einer Anwendung zu finden. Mit dem Switch "-Command" wird die zu startende Anwendung angegeben.

Die AppID lässt sich auf folgende Weise ermitteln:

# PackageFullName und PackageFamilyName über Get-AppPackage ermitteln!

$AppID = (Get-AppxPackageManifest $PackageFullName).Package.Applications.Application.id

Der Start einer PowerShell in einer virtuellen Blase kann

wie folgt durchgeführt werden:

Invoke-CommandInDesktopPackage -PackageFamilyName $PackageFamilyName -AppId $AppID -Command powershell.exe 

M.A.D. Day 2024 Newsletter #3
MSIX: Der aktuelle Stand 2024

Ähnliche Beiträge

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Montag, 30. Dezember 2024

Sicherheitscode (Captcha)

Nick Informationstechnik GmbH
Dribusch 2
30539 Hannover

+49 (0) 511 165 810 190
+49 (0) 511 165 810 199

infonick-it.de

Newsletter

Anmeldung zum deutschen M.A.D. Newsletter mit Informationen zur Anwendungsvirtualisierung!