Сегодня речь пойдёт о вечно свежих релизах с того самого котоосьминога на примере отличного браузера Chromium-GOST (здесь сайт, а здесь гит). Благо, у котоосьминога есть свой api и очень полезная конструкция releases/latest.
Вооружившись боевой магией PowerShell, начинаем кастовать конвейер командлетов. Для начала получим всё, чем богата api-ветвь последнего релиза репозитория. Применяем Invoke-RestMethod:
$release = "https://api.github.com/repos/deemru/chromium-gost/releases/latest" Invoke-RestMethod -uri $release
Просмотрев выдачу, обращаем внимание, что всё нужное хранится в массиве assets. Производим соответствующую выборку:
$release = "https://api.github.com/repos/deemru/chromium-gost/releases/latest" Invoke-RestMethod -uri $release | Select -ExpandProperty assets
Вновь получаем ответ, в котором нужно произвести отбор до ключа browser_download_url. Добавляем в конвейер ещё один Select:
$release = "https://api.github.com/repos/deemru/chromium-gost/releases/latest" Invoke-RestMethod -uri $release | Select -ExpandProperty assets | Select -ExpandProperty browser_download_url
В этот раз ответом будет перечень ссылок для прямого скачивания релиза программы. Разумеется, нам нужно выделить строку по шаблону в имени объекта, чтобы получить ссылку на конкретный файл. В моём случае этим шаблоном является постфикс -windows-amd64-installer.exe. В итоге можно запихнуть ссылку в переменную:
$release = "https://api.github.com/repos/deemru/chromium-gost/releases/latest"
$link = Invoke-RestMethod -uri $release `
| Select -ExpandProperty assets `
| Select -ExpandProperty browser_download_url `
| Select-String -Pattern "-windows-amd64-installer.exe"
Теперь скачаем файл c помощью Start-BitsTransfer, но сначала немного приукрасим конструкцию и обозначим куда именно скачивать и как назвать итоговый файл:
$appname = "chromium.exe"
$path = [Environment]::GetFolderPath("Desktop") + "\$appname"
$release = "https://api.github.com/repos/deemru/chromium-gost/releases/latest"
$link = Invoke-RestMethod -uri $release `
| Select -ExpandProperty assets `
| Select -ExpandProperty browser_download_url `
| Select-String -Pattern "-windows-amd64-installer.exe"
Start-BitsTransfer -Source $link -Destination $path
В скрипте местом назначения (переменная $path) я использовал рабочий стол текущего пользователя, а имя файла обозначил лаконичным chromium.exe (переменная $appname). Таким образом, при каждом скачивании файл chromium.exe будет заменятся свежей версией установщика Chromium-GOST.
Если консоль вернёт ошибку «Запрос был прерван: не удалось создать защищенный канал SSL/TLS.» необходимо явно указать метод шифрования в шапке скрипта:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Кстати, ещё один любопытный момент: чтобы установить браузер Chromium-GOST от имени администратора и для всех пользователей надо использовать параметры запуска:
chromium.exe --system-level --install
На этапе подготовки машины проще всего производить установку браузера с помощью батника. Если, к примеру, установочный файл и батник будут расположены на целевом хосте в одном расположении — можно провести установку и удалить с машины скрипт вместе с установочником:
cd %~dp0 chromium.exe --system-level --install del chromium.exe del %0
А про самоудаляющийся батник у меня даже был отдельный пост.