diff --git a/bootstrap-Windows.ps1 b/bootstrap-Windows.ps1 index 8e4a3ab..6f03c81 100644 --- a/bootstrap-Windows.ps1 +++ b/bootstrap-Windows.ps1 @@ -3,39 +3,42 @@ $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 + # exit } -# Running with elevated permissions +# Code to execute after elevation +Write-Host "Running as Administrator. Performing privileged actions..." # Install 1Password $decision = $Host.UI.PromptForChoice('Install 1Password', 'Proceed?', $choices, 0) @@ -48,40 +51,40 @@ if ($decision -eq 0) { 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 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' -} +# # 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" +# # 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) +# # 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 +# # 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 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' -} +# # 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' +# }