Продолжение вот этого поста, но там я этого касался в общих чертах, а здесь оторвался на всю катушку. Речь идёт о ручном обновлении установщика и установке браузера Chromium-Gost (гит) для всех пользователей хоста.
Скрипт умеет определять разрядность системы и на основании этого скачивать нужный установщик браузера. Старые версии установщиков складываются в отдельную папку old.
Установка браузера осуществляется для всех пользователей компьютера, поэтому потребуются права администратора.
# Заголовок скрипта и протокол шифрования #
[System.Console]::Title = "Установка Chromium-GOST"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# Общие переменные #
$appname = "chromium.exe"
$tempname = "temp"
$path = "$PSScriptRoot\$appname"
$old = "$PSScriptRoot\old"
$newname = $(get-date -f yyyy-MM-dd) + "_chromium.old"
# Получение файла, исходя из разрядности системы #
function GetInstall($filename)
{
$release = "https://api.github.com/repos/deemru/chromium-gost/releases/latest"
if ([Environment]::Is64BitOperatingSystem)
{
$link = Invoke-RestMethod -uri $release `
| Select -ExpandProperty assets `
| Select -ExpandProperty browser_download_url `
| Select-String -Pattern "-windows-amd64-installer.exe"
}
else
{
$link = Invoke-RestMethod -uri $release `
| Select -ExpandProperty assets `
| Select -ExpandProperty browser_download_url `
| Select-String -Pattern "-windows-386-installer.exe"
}
Start-BitsTransfer -Source $link -Destination $filename
}
# Функция обновления установщика #
function Download
{
$exists = Test-Path -Path $path -PathType Leaf
if ($exists)
{
GetInstall($tempname)
$hashexe = (Get-FileHash -Path $path -Algorithm SHA256).Hash
$hashtemp = (Get-FileHash -Path $tempname -Algorithm SHA256).Hash
if ($hashexe -ne $hashtemp)
{
New-Item -Path $old -ItemType Directory -Force -ErrorAction Ignore | Out-Null
Move-Item -Path $path -Destination "$old\$newname" -Force
Rename-Item -Path $tempname -NewName $appname -Force
}
else { Remove-Item -Path $tempname -Force }
}
else { GetInstall($appname) }
}
# Функция установки #
function Install
{
$exists = Test-Path -Path $path -PathType Leaf
if ($exists)
{
Start-Process -FilePath $path -ArgumentList "--system-level --install" -NoNewWindow -Wait
}
else
{
Download
Start-Process -FilePath $path -ArgumentList "--system-level --install" -NoNewWindow -Wait
}
}
# Функция удаления установщика #
function Remove
{
$exists = Test-Path -Path $old -PathType Container
if ($exists)
{
Remove-Item -Path $old -Force -Recurse -Verbose
}
}
## Меню ##
while($true)
{
## Формирование меню скрипта ##
Write-Host
Write-Host "1. Только обновление/скачивание установочного пакета" -ForegroundColor Green
Write-Host "2. Установка Chromium-GOST" -ForegroundColor Green
Write-Host "3. Удалить старые установочные пакеты" -ForegroundColor Red
Write-Host "4. Выход из скрипта" -ForegroundColor Yellow
Write-Host
## Селектор ##
$choice = Read-Host "Выберите вариант"
Write-Host
switch($choice)
{
## Обновление установочного пакета ##
1{ Download }
## Установка Chromium-GOST ##
2{ Install }
## Удалить существующий установочный пакет ##
3{ Remove }
## Выход ##
4{ Exit }
## Неверный выбор ##
default{ Write-Host "Неверный выбор!" -ForegroundColor Red; Write-Host }
}
}
Если этот скрипт немного переработать и убрать из схемы действия пользователя — можно полностью автоматизировать процесс обновления установщика и саму установку браузера, но это уже совсем другая история…