web-dev-qa-db-fra.com

Comment installer une application de Windows Store à l'aide de PowerShell

Je sais si j'ai un fichier de paquet .appx, je peux l'installer via PowerShell avec le Add-AppxPackage cmdlet. Cependant, je souhaite simplement télécharger et installer les packages Microsoft Store par nom.

Je ne veux pas avoir à accéder à la page Microsoft Store, démarrer Fiddler, démarrer le téléchargement, capturer l'URL du fichier .appx, puis le télécharger manuellement afin que je puisse utiliser Add-AppxPackage. (Voyez comment Windows OS HUB a-t-il fait cela ici )

Cela pourrait être amusant - mais ce sera flaky. J'ai besoin d'une méthode scriptable robuste pour la gestion des applications Windows Store.

(Il existe quelques paquets logiciels uniquement accessibles via Microsoft Store. Tout ce que je peux obtenir via le téléchargement au chocolat ou directe MSI.)

Un exemple que je ne puisse pas encore le script est l'installation du Extensions d'image HEIF (nécessaire pour afficher le format d'image de iPhones: *.HEIC format.

Une fois que j'ai installé cela dans le magasin Windows, il apparaît avec Get-AppxPackage

PS C:\Tools> Get-AppxPackage | Where-Object {$_.Name -eq "Microsoft.HEVCVideoExtension" }


Name              : Microsoft.HEVCVideoExtension
Publisher         : CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Architecture      : X64
ResourceId        :
Version           : 1.0.31053.0
PackageFullName   : Microsoft.HEVCVideoExtension_1.0.31053.0_x64__8wekyb3d8bbwe
InstallLocation   : C:\Program Files\WindowsApps\Microsoft.HEVCVideoExtension_1.0.31053.0_x64__8wekyb3d8bbwe
IsFramework       : False
PackageFamilyName : Microsoft.HEVCVideoExtension_8wekyb3d8bbwe
PublisherId       : 8wekyb3d8bbwe
IsResourcePackage : False
IsBundle          : False
IsDevelopmentMode : False
NonRemovable      : False
Dependencies      : {Microsoft.VCLibs.140.00_14.0.27810.0_x64__8wekyb3d8bbwe}
IsPartiallyStaged : False
SignatureKind     : Store
Status            : Ok

Ce que je veux, c'est la cmdlet: Download-AppxPackage Pour que je puisse faire:

Download-AppxPackage -Name "Microsoft.HEVCVideoExtension"

Est-ce que quelqu'un sait comment je peux faire cela?

5
David Wilson

store.rg-adguard.net est une interface graphique pour générer des liens de téléchargement directs pour stocker des applications. Furtivement à la source de cette page, nous pouvons les arracher pour télécharger le contenu directement, mais utiliser packageFamilyName, plutôt que nom (dans votre exemple ce serait Microsoft.HevCVideOextension_8WEKYB3D8BBWE).

function Download-AppxPackage {
[CmdletBinding()]
param (
  [string]$PackageFamilyName,
  [string]$Path
)
   
  process {
    $WebResponse = Invoke-WebRequest -Method 'POST' -Uri 'https://store.rg-adguard.net/api/GetFiles' -Body "type=PackageFamilyName&url=$PackageFamilyName&ring=Retail" -ContentType 'application/x-www-form-urlencoded'
    $LinksMatch = $WebResponse.Links | where {$_ -like '*_x64*.appx*'} | Select-String -Pattern '(?<=a href=").+(?=" r)'
    $DownloadLinks = $LinksMatch.matches.value 

    for ($i = 1; $i -le $DownloadLinks.Count; $i++) {
      Invoke-WebRequest -Uri $DownloadLinks[$i-1] -OutFile "$Path\$PackageFamilyName($i).appx"   
    }
  }
}

Ceci est limité à la version X64 et le chemin doit pointer sur un dossier. Il téléchargera le package et ses dépendances et les enregistrera tous comme PackageFamilyName ( N). AppX

3
A J Wilson