Windows
如何使用 Powershell 從 Windows 應用商店安裝應用程序
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