fix: auto-scan installers repo, sort by name, space-separated selection, remove BOM

This commit is contained in:
Windneiro 2026-04-14 09:36:16 +05:00
parent 60c771784e
commit bb2b87f132
1 changed files with 19 additions and 62 deletions

View File

@ -1,4 +1,4 @@
# ============================================================ # ============================================================
# Skript ustanovki programm # Skript ustanovki programm
# Zapusk: irm https://git.help-d.ru/helmut/auto-turning/raw/branch/main/setup.ps1 | iex # Zapusk: irm https://git.help-d.ru/helmut/auto-turning/raw/branch/main/setup.ps1 | iex
# ============================================================ # ============================================================
@ -59,58 +59,19 @@ try {
exit 1 exit 1
} }
# Gruppiruem programmy po kategoriyam iz konfiga # Sozdayom spisok programm
$categories = @{} $programList = @()
$currentCat = $null
Get-Content $configPath | ForEach-Object {
if ($_ -match "^\s*(\w+):\s*$" -and $_ -notmatch "basic:") {
$currentCat = $matches[1]
$categories[$currentCat] = @()
}
if ($currentCat -and $_ -match '\d+:\s*"(.+)"') {
$categories[$currentCat] += $matches[1]
}
}
# Sozdayom kartu: imya faila -> programma
$programMap = @{}
foreach ($file in $files) { foreach ($file in $files) {
$fileName = $file.name $fileName = $file.name
$programMap[$fileName] = @{ $programList += @{
Name = $fileName -replace '\.exe$|\.msi$', '' Name = ($fileName -replace '\.(exe|msi)$', '') -replace '\.', ' '
File = $fileName File = $fileName
Type = if ($fileName -match '\.msi$') { 'msi' } else { 'exe' } Type = if ($fileName -match '\.msi$') { 'msi' } else { 'exe' }
} }
} }
# Avtomaticheski raspredelyaem programmy po kategoriyam # Sortiruem po imeni
$autoCategories = @{} $programList = $programList | Sort-Object Name
$uncategorized = @()
foreach ($prog in $programMap.Values) {
$assigned = $false
foreach ($cat in $categories.Keys) {
foreach ($keyword in $categories[$cat]) {
if ($prog.Name -match [regex]::Escape($keyword)) {
if (-not $autoCategories.ContainsKey($cat)) {
$autoCategories[$cat] = @()
}
$autoCategories[$cat] += $prog
$assigned = $true
break
}
}
if ($assigned) { break }
}
if (-not $assigned) {
$uncategorized += $prog
}
}
if ($uncategorized.Count -gt 0) {
$autoCategories["Other"] = $uncategorized
}
# ============================================================ # ============================================================
# 3. VYBOR PROGRAMM # 3. VYBOR PROGRAMM
@ -119,24 +80,21 @@ Write-Host "[3/4] Program selection..." -ForegroundColor Yellow
Write-Host "`nAvailable programs in repo:`n" -ForegroundColor Cyan Write-Host "`nAvailable programs in repo:`n" -ForegroundColor Cyan
$i = 1
$progMap = @{} $progMap = @{}
$allPrograms = @() $allPrograms = @()
$i = 1
foreach ($cat in ($autoCategories.Keys | Sort-Object)) { foreach ($prog in $programList) {
Write-Host "`n [$cat]" -ForegroundColor Magenta Write-Host (" {0,2} - {1}" -f $i, $prog.Name) -ForegroundColor Yellow
foreach ($prog in $autoCategories[$cat]) {
Write-Host " $i - $($prog.Name)" -ForegroundColor Yellow
$progMap[$i] = $prog $progMap[$i] = $prog
$allPrograms += $prog $allPrograms += $prog
$i++ $i++
} }
}
Write-Host "`n a - ALL programs" -ForegroundColor Green Write-Host "`n a - ALL programs" -ForegroundColor Green
Write-Host " 0 - Cancel`n" -ForegroundColor Gray Write-Host " 0 - Cancel`n" -ForegroundColor Gray
$choice = Read-Host "Select programs (1,2,3 or a)" $choice = Read-Host "Select (numbers separated by space, or a)"
if ($choice -eq "0") { if ($choice -eq "0") {
Write-Host "Canceled" -ForegroundColor Red Write-Host "Canceled" -ForegroundColor Red
@ -147,10 +105,9 @@ $selectedPrograms = @()
if ($choice -eq "a") { if ($choice -eq "a") {
$selectedPrograms = $allPrograms $selectedPrograms = $allPrograms
} else { } else {
foreach ($num in $choice.Split(',')) { foreach ($num in ($choice -split '\s+') | Where-Object { $_ -match '^\d+$' }) {
$num = $num.Trim() if ($progMap[[int]$num]) {
if ($progMap[$num]) { $selectedPrograms += $progMap[[int]$num]
$selectedPrograms += $progMap[$num]
} }
} }
} }