84 lines
3.0 KiB
PowerShell
84 lines
3.0 KiB
PowerShell
param(
|
|
[switch]$UseAddAppxPackage,
|
|
[switch]$Yes
|
|
)
|
|
|
|
Set-StrictMode -Version Latest
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
$scriptRoot = Split-Path -Parent $PSCommandPath
|
|
$msix = Get-ChildItem -Path $scriptRoot -Filter "*.msix" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
|
|
$cert = Get-ChildItem -Path $scriptRoot -Filter "*.cer" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
|
|
|
|
function Test-IsAdministrator {
|
|
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
|
|
$principal = [Security.Principal.WindowsPrincipal]::new($identity)
|
|
return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
|
|
}
|
|
|
|
function Confirm-Continue {
|
|
if ($Yes) {
|
|
return
|
|
}
|
|
|
|
Write-Host "This script will install Olive for the current Windows user." -ForegroundColor Yellow
|
|
Write-Host "It will import the public certificate into Cert:\LocalMachine\Root. Administrator rights are required."
|
|
Write-Host "It will open the MSIX package found next to this script."
|
|
Write-Host "It will not configure your Klipy API key. You do that later in Olive settings."
|
|
$answer = Read-Host "Continue? Type YES"
|
|
if ($answer -ne "YES") {
|
|
throw "Cancelled by user."
|
|
}
|
|
}
|
|
|
|
function Wait-ForCertificate {
|
|
param(
|
|
[string]$Thumbprint,
|
|
[int]$TimeoutSeconds = 10
|
|
)
|
|
|
|
$deadline = (Get-Date).AddSeconds($TimeoutSeconds)
|
|
do {
|
|
$root = Get-ChildItem Cert:\LocalMachine\Root | Where-Object { $_.Thumbprint -eq $Thumbprint } | Select-Object -First 1
|
|
if ($null -ne $root) {
|
|
return
|
|
}
|
|
|
|
Start-Sleep -Milliseconds 300
|
|
} while ((Get-Date) -lt $deadline)
|
|
|
|
throw "Certificate was imported, but Windows did not report it in Cert:\LocalMachine\Root before timeout."
|
|
}
|
|
|
|
if ($null -eq $msix) {
|
|
throw "No .msix file found next to this script."
|
|
}
|
|
|
|
if ($null -eq $cert) {
|
|
throw "No .cer certificate found next to this script."
|
|
}
|
|
|
|
if (-not (Test-IsAdministrator)) {
|
|
throw "Administrator rights are required to import the Olive signing certificate into Cert:\LocalMachine\Root. Run Install-Olive.cmd, or start PowerShell as administrator."
|
|
}
|
|
|
|
Confirm-Continue
|
|
|
|
Write-Host "==> Importing certificate into LocalMachine Root" -ForegroundColor Cyan
|
|
Import-Certificate -FilePath $cert.FullName -CertStoreLocation Cert:\LocalMachine\Root | Out-Null
|
|
|
|
$trustedCert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($cert.FullName)
|
|
Wait-ForCertificate -Thumbprint $trustedCert.Thumbprint
|
|
|
|
if ($UseAddAppxPackage) {
|
|
Write-Host "==> Installing MSIX with Add-AppxPackage" -ForegroundColor Cyan
|
|
Add-AppxPackage -Path $msix.FullName
|
|
} else {
|
|
Write-Host "==> Opening MSIX with Windows App Installer" -ForegroundColor Cyan
|
|
Start-Process -FilePath $msix.FullName -Wait
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "Olive install flow completed." -ForegroundColor Green
|
|
Write-Host "Restart PowerToys, open Command Palette, launch 'Klipy GIF Picker', then set the Klipy API key in Olive settings."
|