Я знаю, что если у меня есть файл пакета .appx, я могу установить его через PowerShell с Add-AppxPackage
командлет. Однако я просто хочу загрузить и установить пакеты Microsoft Store по имени.
Я не хочу переходить на страницу Microsoft Store, запускать скрипач, запускать загрузку, захватывать URL-адрес файла .appx, а затем вручную загружать его, чтобы я мог использовать 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
Мне нужен командлет: Download-AppxPackage
чтобы я мог:
Download-AppxPackage -Name "Microsoft.HEVCVideoExtension"
Кто-нибудь знает, как я могу это сделать?
store.rg-adguard.net - это графический интерфейс для создания прямых ссылок для загрузки приложений из магазина. Заглянув в источник этой страницы, мы можем использовать их, чтобы загрузить контент напрямую, но используя 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, и путь должен указывать на папку. Он загрузит пакет и его зависимости и сохранит их все как PackagefamilyName(п) .appx