Windows

如何使用 Powershell 從 Windows 應用商店安裝應用程序

  • February 19, 2021

Add-AppxPackage我知道如果我有 .appx 封包件,我可以使用cmdlet通過 powershell 安裝它。但是,我只想按名稱下載和安裝 Microsoft Store 包。

我不想去 Microsoft Store 頁面,啟動 fiddler,開始下載,擷取 .appx 文件 URL,然後手動下載它,以便我可以使用Add-AppxPackage. (在此處查看 Windows OS Hub 是如何做到的)

這可能很有趣——但它會很不穩定。我需要一種強大的可編寫腳本的方法來管理 Windows 應用商店應用。

(有一些軟體包只能通過 Microsoft Store 訪問。我可以通過 Chocolatey 或直接 msi 下載獲得的所有其他軟體包。)

我還不能編寫腳本的一個範例是安裝HEIF 圖像擴展(需要從 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

我想要的是 cmdlet:Download-AppxPackage這樣我就可以做到:

Download-AppxPackage -Name "Microsoft.HEVCVideoExtension"

有誰知道我該怎麼做?

store.rg-adguard.net是一個 GUI,用於生成商店應用程序的直接下載連結。查看該頁面的來源,我們可以捎帶它們直接下載內容,但使用PackageFamilyName,而不是Name(在您的範例中,它將是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 版本,路徑必須指向文件夾。它將下載包及其依賴項並將它們全部保存為PackagefamilyName ( n ).appx

引用自:https://serverfault.com/questions/1018220