From cc157f69769c4639e927ed1a86aea2b40cded443 Mon Sep 17 00:00:00 2001 From: MyDrift Date: Wed, 28 Aug 2024 18:52:53 +0200 Subject: [PATCH] [3] Admin elevation (#2601) * admin titus version * add proper method to launch correct script * fix * add .exe * last fix * remove ! that was for testing --------- Co-authored-by: Chris Titus --- scripts/start.ps1 | 15 +++++++++------ windev.ps1 | 12 ++++++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/scripts/start.ps1 b/scripts/start.ps1 index 73693260..06e53b69 100644 --- a/scripts/start.ps1 +++ b/scripts/start.ps1 @@ -44,12 +44,15 @@ $sync.version = "#{replaceme}" $sync.configs = @{} $sync.ProcessRunning = $false -# If script isn't running as admin, show error message and quit -If (([Security.Principal.WindowsIdentity]::GetCurrent()).Owner.Value -ne "S-1-5-32-544") { - Write-Host "===========================================" -Foregroundcolor Red - Write-Host "-- Scripts must be run as Administrator ---" -Foregroundcolor Red - Write-Host "-- Right-Click Start -> Terminal(Admin) ---" -Foregroundcolor Red - Write-Host "===========================================" -Foregroundcolor Red +if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { + Write-Output "Winutil needs to be run as Administrator. Attempting to relaunch." + + $script = if ($MyInvocation.MyCommand.Path) { "& '" + $MyInvocation.MyCommand.Path + "'" } else { "irm 'https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1' | iex"} + $powershellcmd = if (Get-Command pwsh -ErrorAction SilentlyContinue) { "pwsh" } else { "powershell" } + $processCmd = if (Get-Command wt.exe -ErrorAction SilentlyContinue) { "wt.exe" } else { $powershellcmd } + + Start-Process $processCmd -ArgumentList "$powershellcmd -ExecutionPolicy Bypass -NoProfile -Command $script" -Verb RunAs + break } diff --git a/windev.ps1 b/windev.ps1 index 3e1805f0..5bba017d 100644 --- a/windev.ps1 +++ b/windev.ps1 @@ -12,6 +12,18 @@ Run in Admin Powershell > ./windev.ps1 #> +if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { + Write-Output "Winutil needs to be run as Administrator. Attempting to relaunch." + + $script = if ($MyInvocation.MyCommand.Path) { "& '" + $MyInvocation.MyCommand.Path + "'" } else { "irm 'https://github.com/ChrisTitusTech/winutil/raw/main/windev.ps1' | iex"} + $powershellcmd = if (Get-Command pwsh -ErrorAction SilentlyContinue) { "pwsh" } else { "powershell" } + $processCmd = if (Get-Command wt.exe -ErrorAction SilentlyContinue) { "wt.exe" } else { $powershellcmd } + + Start-Process $processCmd -ArgumentList "$powershellcmd -ExecutionPolicy Bypass -NoProfile -Command $script" -Verb RunAs + + break +} + # Function to fetch the latest release tag from the GitHub API function Get-LatestRelease { try {