4 minutes reading time (852 words)

Msix und AppX Pakete mit PowerShell von der Kommandozeile starten

MSIX_ZOOM

Für Microsoft Store Anwendungen (oder auch Modern Appplications) sind inzwischen zum Standard auf dem Desktop geworden. Viele Benutzer möchten sich nicht mehr einschränken und so soll der Calculator auf dem Terminalserver auch genau so aussehen wieder Calculator auf dem eigenen Windows 10 Desktop. Manchmal möchte man auch einen eigenen „Launcher" für eine Anwendung nutzen. Beispielsweise um mit dem Start der Anwendung ein Skript zu starten um Registrierungsschlüssel zu importieren oder Netzwerklaufwerke zu verbinden.

In so einem Fall muss auch eine „Modern Application" von der Kommandozeile gestartet werden. Nun, ein Blick auf das Startmenüsymbol des Calculators zeigt, dass das nicht so leicht ist. Das Symbol dort hat keine Eigenschaften. Weder im Benutzerordner des Startmenüs noch im Systemordner gibt es eine Verknüpfung (C:\ProgramData\Microsoft\Windows\Start Menu\Programs \*.lnk). Seit Windows 8 werden die Symbole für die Modern Applications anders verarbeitet als gewohnt.
Es Finden sich daher einige Blogs zum Thema „Wie kann man diese Anwendungen mit der Konsole starten". Leider sind diese oft sehr kompliziert und nur schwer nachvollziehbar. Der einfachste Weg ist die Erzeugung einer echten „.lnk" Verknüpfung für der Aufruf über die Kommandozeile.

Dazu:
1. Im Explorer Shell:AppsFolder eingeben
2. Mit der rechten Maustaste auf das Symbol gehen und „Create shortcut" wählen.

Der Shortcut wird direkt auf dem Desktop erzeugt und kann natürlich verschoben werden. Weiterhin kann man den Shortcut nutzen, um das Icon zu extrahieren.
Der Start über die Command-line (PowerShell) kann nun beispielsweise mit dem folgenden Befehl erfolgen (Pfade ggf. anpassen):

& "$env:USERProfile\Desktop\Calculator - Shortcut.lnk"
#Oder auch
start-Process "$env:USERProfile\Desktop\Calculator - Shortcut.lnk"
Das Extrahieren des Symbols ist beispielsweise wie folgt möglich:
Add-Type -AssemblyName System.Drawing
$Icon = [System.Drawing.Icon]::ExtractAssociatedIcon(„$env:USERProfile\Desktop\Calculator - Shortcut.lnk“)
$Icon.ToBitmap().Save(„$env:USERProfile\Desktop\Calculator- Shortcut.bmp“) 

Das war der einfache Weg, der komplexe Weg sieht vor, dass man in das Paketmanifest schaut, dieses ausliest und dann über die Explorer.exe einen Aufruf zusammen baut. Also Explorer.Exe Shell:AppsFolder:<ApplicationID>!<AppID>
Nun wollte ich genau diesen Aufruf vereinfachen und habe daher für die Suche nach den Parametern und den Aufruf der AppX Anwendung einen PowerShell OneLiner gebaut. Dieser schaut mit Wildcard nach dem Paket *<NAME>*. sucht Die AppID heraus und startet die Anwendung. Im folgenden MSPaint3d und den Calculator.
Achtung: Ihr müsst vorsuchtig mit dem Aufruf sein. Ein Aufruf *Microsoft* versucht bei mir aktuell 113 Anwendungen zu starten.

Get-AppxPackage *mspaint* | % {& Explorer.exe $('Shell:AppsFolder\' + $_.PackageFamilyName + ‚!' + $((Get-AppxPackageManifest $_.PackageFullName).Package.Applications.Application.id))} 
Get-AppxPackage *calc* | % {& Explorer.exe $(‚Shell:AppsFolder\' + $_.PackageFamilyName + ‚!' + $((Get-AppxPackageManifest $_.PackageFullName).Package.Applications.Application.id))}
 

Nun möchte man die Commandline vielleicht auch über eine Verknüpfung nutzen. Also über einen Aufruf Powerchell.exe. Dazu die folgenden Einzeiler:

& Powershell.exe -Command ‚& {param($pname) Get-AppxPackage "*$pname*" | % { &explorer.exe $($("""Shell:AppsFolder\\""") + $_.PackageFamilyName + """!""" + $((Get-AppxPackageManifest $_.PackageFullName).Package.Applications.Application.id)) }}' "Paint"
& Powershell.exe -Command ‚& {param($pname) Get-AppxPackage "*$pname*" | % { &explorer.exe $($("""Shell:AppsFolder\\""") + $_.PackageFamilyName + """!""" + $((Get-AppxPackageManifest $_.PackageFullName).Package.Applications.Application.id)) }}' "Calc"
 

Wie wir schon bei sind, dachte ich mich auch gleich ein Commandline Tool dafür zu erstellen. Die ISE-Steroids haben ganz hervorragende Möglichkeiten dafür. Das Skript sollte nicht viel Zeit kosten. Ich wollte ja nur auf die Schnelle mal einen neuen Blog schrieben. Aber es sollte dennoch Fehler abfangen. Dazu hier das PowerShell Skript:

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$true)] [String] $ShortAppname,
  [int] $AppID = 0
)
  
<#
    .Synopsis
    Start a AppX Application
    .DESCRIPTION
    Start a AppX Application
    .EXAMPLE
    Start-Appx Calc #Start the calculator app
#>
  
function Start-AppXApplication
{
  [CmdletBinding()]
  
  param(      [Parameter(Mandatory=$true)][String] $ShortAppname,
    [int] $AppID = 0
  )
  Process
  {
    Write-Output "Andreas Nick 2020 - https://www.andreasNick.com"     Write-Output "Start-AppXApplication [-ShortAppname] <String> [[-AppID] <Int32>]`n"    
    if($ShortAppname.Length -le 3 ) {       Write-Warning "The name must have at least four characters"     } else {
      $AppXPackages = @(Get-AppxPackage *$ShortAppname*)
      if($AppXPackages.Count -gt 1) {
        Write-Warning "To may results for $ShortAppname :$($AppXPackages.Count) - abort"
      } else  {
  
        $AppXPackages | Select-Object -First 1 | ForEach-Object {
          $AppIDs =  @($((Get-AppxPackageManifest $_.PackageFullName).Package.Applications.Application)) #[$AppID].id
          Write-Verbose ($AppIDs | Out-String)
          if(-not ($AppIDs[$AppID].id)){
            Write-Warning "Id $AppID not exist"           } <br>           else{
              Start-Process Explorer.exe -ArgumentList $('Shell:AppsFolder\' + $_.PackageFamilyName + '!' +  $AppIDs[$AppID].id)
          }
        } 
      }
    }
  }
   
}
   
 
Start-AppXApplication -ShortAppname $ShortAppname $AppID 

Leider gab es erst einmal Probleme mit der Ausgabe. Toboas Welter, der Autor der ISE-Steroids (Link: Wer es kaufen möchte - ich kann die Steroids sehr empfehlen) konnte mir aber bald helfen:

Es gibt nun zwei Versionen im Archiv (unten zum Download). Eine Version mit Textausgabe in der Konsole und eine Version ohne. Da mit der Textausgabe kurzzeitig auch ein weiteres Fenster erscheint. Der Aufruf erfolgt mit einer Abkrützung für die App, beispielsweise Calc für den Calculator. Der vollständige AppX Name ifür den Calculator ist übrigens „Microsoft.WindowsCalculator". Da nun einige AppX Anwendungen mehr als eine App enthalten kann als zweiter Parameter eine ID mit übergeben werden. Nutzt ihr die Version mit Fehlerausgabe, würde eine unbekannte ID gemeldet werden und die AppX Anwendung nicht starten.

.\Start-AppXApplicationHideOutput.exe *Com* # startet Windows Mail
.\Start-AppXApplicationHideOutput.exe *Com* 1 # startet den Kalender in der Mail App

Der Anwendungsname ist hier übrigens „MicrosoftCommunicator" - daher funktioniert das Kürzel „com"
Einige Beispiele im folgenden Screenshot:

Download (Executable und Skript)

Downloads:

zipAppXLauncher

Information
Erstelldatum Donnerstag, 06. August 2020 21:50
Änderungsdatum
Version 1.0
Dateigröße 123.77 KB
Erstellt von Andreas Nick
Geändert von
Downloads 87
Lizenz Nick Informationstechnik Tool LicenceTooltip
Preis

WVD - Windows Virtual Desktop auf der grünen Wiese
OTPEdit ein Management Tool für One Time Passwörte...
 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Gäste
Dienstag, 01. Dezember 2020

Sicherheitscode (Captcha)

By accepting you will be accessing a service provided by a third-party external to https://www.nick-it.de/

Nick Informationstechnik GmbH
Dribusch 2
30539 Hannover

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

infonick-it.de

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.