chore: first version
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
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."
|
||||
Reference in New Issue
Block a user