<# .NOTES Author : Chris Titus @christitustech Runspace Author: @DeveloperDurp GitHub : https://github.com/ChrisTitusTech Version : #{replaceme} #> param ( [switch]$Debug, [string]$Config, [switch]$Run ) # Set DebugPreference based on the -Debug switch if ($Debug) { $DebugPreference = "Continue" } if ($Config) { $PARAM_CONFIG = $Config } $PARAM_RUN = $false # Handle the -Run switch if ($Run) { Write-Host "Running config file tasks..." $PARAM_RUN = $true } # Load DLLs Add-Type -AssemblyName PresentationFramework Add-Type -AssemblyName System.Windows.Forms # Variable to sync between runspaces $sync = [Hashtable]::Synchronized(@{}) $sync.PSScriptRoot = $PSScriptRoot $sync.version = "#{replaceme}" $sync.configs = @{} $sync.ProcessRunning = $false # Store latest script URL in variable. $latestScript = "https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1" # Check if script is running as Administrator 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." # Partial rollback from #2648, changed irm and iex to Invoke-RestMethod and Invoke-Expression. $script = if ($MyInvocation.MyCommand.Path) { "& '" + $MyInvocation.MyCommand.Path + "'" } else { "Invoke-RestMethod '$latestScript' | Invoke-Expression"} $powershellcmd = if (Get-Command pwsh -ErrorAction SilentlyContinue) { "pwsh" } else { "powershell" } $processCmd = if (Get-Command wt.exe -ErrorAction SilentlyContinue) { "wt.exe" } else { $powershellcmd } # Start new process with elevated privileges Start-Process $processCmd -ArgumentList "$powershellcmd -ExecutionPolicy Bypass -NoProfile -Command $script" -Verb RunAs break } # Logging $dateTime = Get-Date -Format "yyyy-MM-dd_HH-mm-ss" $logdir = "$env:localappdata\winutil\logs" [System.IO.Directory]::CreateDirectory("$logdir") | Out-Null Start-Transcript -Path "$logdir\winutil_$dateTime.log" -Append -NoClobber | Out-Null # Set PowerShell window title $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Admin)" clear-host