Softwarevirtualisierung mit App V 5 192Unser Buch "Softwarevirtualisierung mit App-V 5"

Das deutsche App-V 5 Buch: 496 Seiten Wissen zu Microsoft App-V 5 (5.1 bis HF6). Ab Windows 7 bis Server 2016 mit Zusatzinhalten zu App-V mit VDI, Terminalservern, XenDesktop und SCCM Mit Fragestellungen zum Contentstore, Skripting, Hochverfügbarkeit usw.
4 minutes reading time (841 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 Kommandoiozeile.

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

ShellAppsFolder

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 herforragende Möglichkeiten dafür. Das Skript sollte nicht viel Zeit kostenIch 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"           }         
              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:

Tobias

 

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:

AppxLauncher

Download (Executable und Skript)

Dateien:

zip.pngAppXLauncher

Information
Erstelldatum 06.08.2020 21:50:33
Änderungsdatum
Version 1.0
Dateigröße 123.77 KB
Erstellt von Andreas Nick
Geändert von
Downloads 44
Lizenz Nick Informationstechnik Tool LicenceTooltip
Preis

 

OTPEdit ein Management Tool für One Time Passwörte...

Ähnliche Beiträge

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Gäste
Samstag, 26. September 2020

Sicherheitscode (Captcha)

Kontakt

Nick Informationstechnik GmbH
WEB : http://www.nick-it.de
TEL : +49 511 165.810.190
MAIL: info(at)nick-it.de

@nickinformation Tweets

Most Popular Post

04. Mai 2015
NITCtxPatcher a patchmanager for Citrix XenApp and XenDesktop 7.xMay 2017 The NITCtxPatchManager is back, after some changes from Citrix on the websit...
02. April 2015
NIT-GPOSearch is a free tool to search in the Group Policy (admx, adml) definitions for a specific setting. New in Version 1.2 - search in the domain ...
14. März 2015
I released the Citrix Application Streaming (XenAppStreaming) Converter with source code on GitHubhttps://github.com/AndreasNick/CtxStr2AppV I ho...
Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Weitere Informationen Ok