Add InstallApps.ps1

This commit is contained in:
Ryan 2024-09-07 19:04:50 +00:00
commit 0a187b753f

98
InstallApps.ps1 Normal file
View File

@ -0,0 +1,98 @@
# Function to display a menu and get user input
function Show-Menu {
param (
[string]$prompt,
[array]$options
)
Write-Host $prompt
for ($i = 0; $i -lt $options.Length; $i++) {
Write-Host "$($i + 1). $($options[$i])"
}
$choice = Read-Host "Select an option (1-$($options.Length))"
return $choice
}
# Function to select multiple options using spacebar
function Select-MultipleOptions {
param (
[string]$prompt,
[array]$options
)
Write-Host $prompt
$selectedOptions = @()
# Display options with selection state
for ($i = 0; $i -lt $options.Length; $i++) {
Write-Host "$($i + 1). $($options[$i]) [ ]"
}
Write-Host "Use spacebar to select/unselect and Enter to confirm."
# Capture user input
while ($true) {
$key = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
if ($key.Character -match '\d') {
$index = [int]$key.Character - 1
if ($index -ge 0 -and $index -lt $options.Length) {
if ($selectedOptions.Contains($index)) {
$selectedOptions.Remove($index)
} else {
$selectedOptions.Add($index)
}
}
} elseif ($key.VirtualKeyCode -eq 13) {
break
}
}
return $selectedOptions | ForEach-Object { $options[$_] }
}
# Main Script Logic
$mainMenuChoice = Show-Menu "Do you want to:" @("Update all apps", "Install apps")
switch ($mainMenuChoice) {
1 {
# Update all apps
Write-Host "Updating all apps..."
Start-Process winget -ArgumentList "upgrade --all" -NoNewWindow -Wait
}
2 {
# Install apps options
$installChoice = Show-Menu "Choose an installation option:" @("Fresh install of ALL apps", "Select package groups", "Install select packages only")
switch ($installChoice) {
1 {
# Fresh install of ALL apps
Write-Host "Performing fresh install of all apps..."
Get-ChildItem -Path "C:\winget\install\groups\*.ps1" | ForEach-Object { & $_.FullName }
}
2 {
# Select package groups
$packageGroups = Get-ChildItem -Path "C:\winget\install\groups\*.ps1" | Select-Object -ExpandProperty Name
$selectedGroups = Select-MultipleOptions "Select package groups to install:" $packageGroups
foreach ($group in $selectedGroups) {
Write-Host "Installing group: $group"
& "C:\winget\install\groups\$group"
}
}
3 {
# Install select packages only
$packages = Get-Content -Path "C:\winget\install\individual\list.ps1"
$selectedPackages = Select-MultipleOptions "Select individual packages to install:" $packages
foreach ($package in $selectedPackages) {
Write-Host "Installing package: $package"
& $package
}
}
}
}
default {
Write-Host "Invalid choice, please try again."
}
}