From 39d070eb344530d6619f77056b15b1925d0871d3 Mon Sep 17 00:00:00 2001 From: "Kenneth Benzie (Benie)" Date: Fri, 9 Aug 2024 12:54:43 +0100 Subject: [PATCH] temp! --- bootstrap-Windows.ps1 | 136 +++++++++++++++++++++--------------------- 1 file changed, 67 insertions(+), 69 deletions(-) diff --git a/bootstrap-Windows.ps1 b/bootstrap-Windows.ps1 index 8e4a3ab..ed6447b 100644 --- a/bootstrap-Windows.ps1 +++ b/bootstrap-Windows.ps1 @@ -2,86 +2,84 @@ $is_elevated = [bool]([Security.Principal.WindowsPrincipal] [Security.Principal. $choices = '&Yes', '&No' if (-Not $is_elevated) { - # Not running with elevated permissions + Write-Host "Not running as Administrator. Performing unprivileged actions..." # Install Scoop $scoop_installer = "$env:USERPROFILE/Downloads/ScoopInstaller.ps1" Invoke-WebRequest -Uri https://get.scoop.sh -OutFile $scoop_installer &$scoop_installer -ScoopDir "$env:LocalAppData/Scoop" -ScoopGlobalDir "$env:ProgramData/Scoop" - # Get the current script's path - $ScriptPath = $MyInvocation.MyCommand.Definition + # The command you want to run with elevated privileges + $Command = "Set-ExecutionPolicy Bypass -Scope Process -Force; " + + "[System.Net.ServicePointManager]::SecurityProtocol = " + + "[System.Net.ServicePointManager]::SecurityProtocol -bor 3072; " + + "iex ((New-Object System.Net.WebClient).DownloadString('https://git.infektor.net/config/bootstrap/raw/update/bootstrap-Windows.ps1'))" - # Create a new process to run the script as administrator + # Create a temporary batch file + $batchFile = [System.IO.Path]::GetTempFileName() + ".bat" + $batchContent = "@echo off`r`n" + ` + "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command `"$Command`"`r`n" + ` + "pause" + + # Write the batch content to the file + Set-Content -Path $batchFile -Value $batchContent + + # Start the batch file with elevated privileges $StartInfo = New-Object System.Diagnostics.ProcessStartInfo - $StartInfo.FileName = "powershell.exe" - - # Add parameters to the command-line arguments - $StartInfo.Arguments = "-NoProfile -ExecutionPolicy Bypass -File `"$ScriptPath`"" - - # Elevate privileges + $StartInfo.FileName = $batchFile $StartInfo.Verb = "runas" - - # Ensure output is visible to the user $StartInfo.UseShellExecute = $true - $StartInfo.RedirectStandardOutput = $false - $StartInfo.RedirectStandardError = $false - $StartInfo.CreateNoWindow = $false - # Start the elevated process [System.Diagnostics.Process]::Start($StartInfo) | Out-Null - - # Exit the current (non-admin) process - exit -} - -# Running with elevated permissions - -# Install 1Password -$decision = $Host.UI.PromptForChoice('Install 1Password', 'Proceed?', $choices, 0) -if ($decision -eq 0) { - $1password_installer = "$env:USERPROFILE/Downloads/1PasswordSetup-latest.exe" - Invoke-WebRequest -Uri "https://downloads.1password.com/win/1PasswordSetup-latest.exe" -OutFile "$1password_installer" - &$1password_installer - Remove-Item $1password_installer } else { - echo 'Skipping 1Password' -} - -# Enable Hyper-V -$decision = $Host.UI.PromptForChoice('Enable Hyper-V', 'Proceed?', $choices, 0) -if ($decision -eq 0) { - Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All -} else { - echo 'Skipping Hyper-V' -} - -# Enable Containters -$decision = $Host.UI.PromptForChoice('Enable Containers', 'Proceed?', $choices, 0) -if ($decision -eq 0) { - Enable-WindowsOptionalFeature -Online -FeatureName Containers -All -} else { - echo 'Skipping Containers' -} - -# Get the shell application object -$shellApp = New-Object -ComObject "Shell.Application" - -# Run the command without elevation -$shellApp.ShellExecute("powershell.exe", "-NoProfile -Command `"& { $nonElevatedCommand }`"", "", "open", 0) - -# Start-Process -NoNewWindow -Credential "$env:UserDomain\$env:UserName" -FilePath "powershell.exe" -ArgumentList "-NoProfile -Command & { & $($command) }" -# Start-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile -Command & { & $($command) }" -Credential $user -WindowStyle Hidden - -# Install Chocolatey -iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) - -# Install SSH Server -$decision = $Host.UI.PromptForChoice('Install SSH Server', 'Proceed?', $choices, 0) -if ($decision -eq 0) { - choco install --yes "--package-parameters=/SSHServerFeature" openssh - Start-Service sshd - Set-Service -Name sshd -StartupType 'Automatic' -} else { - echo 'Skipping SSH Server' + Write-Host "Running as Administrator. Performing privileged actions..." + + # Install 1Password + $decision = $Host.UI.PromptForChoice('Install 1Password', 'Proceed?', $choices, 0) + if ($decision -eq 0) { + $1password_installer = "$env:USERPROFILE/Downloads/1PasswordSetup-latest.exe" + Invoke-WebRequest -Uri "https://downloads.1password.com/win/1PasswordSetup-latest.exe" -OutFile "$1password_installer" + &$1password_installer + Remove-Item $1password_installer + } else { + echo 'Skipping 1Password' + } + + # # Enable Hyper-V + # $decision = $Host.UI.PromptForChoice('Enable Hyper-V', 'Proceed?', $choices, 0) + # if ($decision -eq 0) { + # Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All + # } else { + # echo 'Skipping Hyper-V' + # } + + # # Enable Containters + # $decision = $Host.UI.PromptForChoice('Enable Containers', 'Proceed?', $choices, 0) + # if ($decision -eq 0) { + # Enable-WindowsOptionalFeature -Online -FeatureName Containers -All + # } else { + # echo 'Skipping Containers' + # } + + # # Get the shell application object + # $shellApp = New-Object -ComObject "Shell.Application" + + # # Run the command without elevation + # $shellApp.ShellExecute("powershell.exe", "-NoProfile -Command `"& { $nonElevatedCommand }`"", "", "open", 0) + + # # Start-Process -NoNewWindow -Credential "$env:UserDomain\$env:UserName" -FilePath "powershell.exe" -ArgumentList "-NoProfile -Command & { & $($command) }" + # # Start-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile -Command & { & $($command) }" -Credential $user -WindowStyle Hidden + + # # Install Chocolatey + # iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) + + # # Install SSH Server + # $decision = $Host.UI.PromptForChoice('Install SSH Server', 'Proceed?', $choices, 0) + # if ($decision -eq 0) { + # choco install --yes "--package-parameters=/SSHServerFeature" openssh + # Start-Service sshd + # Set-Service -Name sshd -StartupType 'Automatic' + # } else { + # echo 'Skipping SSH Server' + # } }