web-dev-qa-db-ja.com

Powershellを使用してWindowsストアからアプリをインストールする方法

.appxパッケージファイルがある場合は、Add-AppxPackageコマンドレットを使用してPowerShellからインストールできます。ただし、名前でMicrosoft Storeパッケージをダウンロードしてインストールするだけです。

Microsoftストアページに移動し、フィドラーを開始し、ダウンロードを開始し、.appxファイルのURLをキャプチャして、Add-AppxPackageを使用できるように手動でダウンロードする必要はありません。 (Windows OS Hubがどのように実行したかを参照してください ここ

楽しいかもしれませんが、フレーク状になります。 Windowsストアアプリを管理するための堅牢でスクリプト可能な方法が必要です。

(Microsoft Storeからのみアクセスできるソフトウェアパッケージがいくつかあります。それ以外はChocolateyまたは直接msiダウンロードから入手できます。)

スクリプトを作成できない例の1つは、HEIF Image Extensionsのインストールです(iPhoneから画像形式を表示するために必要です:*.HEIC形式。

これをWindowsストアからインストールすると、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

私が欲しいのは、コマンドレットDownload-AppxPackageです。

Download-AppxPackage -Name "Microsoft.HEVCVideoExtension"

誰か私がこれを行う方法を知っていますか?

3
David Wilson

store.rg-adguard.net は、ストアアプリへの直接ダウンロードリンクを生成するためのGUIです。そのページのソースを覗いて、コンテンツを直接ダウンロードするためにそれらを便乗させることができますが、NameではなくPackageFamilyNameを使用します(例では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"   
    }
  }
}

これはx64バージョンに限定されており、パスはフォルダーを指す必要があります。パッケージとその依存関係をダウンロードし、それらをすべてPackagefamilyNamen)。appxとして保存します

3
A J Wilson