Назад | Перейти на главную страницу

Как установить приложение из Windows Store с помощью Powershell

Я знаю, что если у меня есть файл пакета .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