diff options
| author | Thomas Schmucker <ts@its1.de> | 2026-07-24 10:06:52 +0200 |
|---|---|---|
| committer | Thomas Schmucker <ts@its1.de> | 2026-07-24 10:06:52 +0200 |
| commit | f60d38e2ad0fdc5b0de7aea2d31ddaa0a3485c86 (patch) | |
| tree | 7192c028b8c9720118fdea375d8101243f7f0a66 /bootstrap-win/neovim.ps1 | |
| parent | eb5a02ceb2008b7987e597e7d697fa81d0c5338b (diff) | |
| download | dotfiles-f60d38e2ad0fdc5b0de7aea2d31ddaa0a3485c86.tar.gz dotfiles-f60d38e2ad0fdc5b0de7aea2d31ddaa0a3485c86.tar.bz2 dotfiles-f60d38e2ad0fdc5b0de7aea2d31ddaa0a3485c86.zip | |
bootstrap-win: PATH-Ergaenzung fuer bereits installierte, aber nicht gefundene Pakete automatisieren
Neue Helper Find-BinaryDirectory (sucht <Binary>.exe unter Program
Files, Program Files (x86), %LOCALAPPDATA%\Programs) und Add-ToUserPath
(dauerhaft + fuer die laufende Sitzung). Install-WingetPackage nutzt
das jetzt automatisch im 'bereits installiert, aber nicht im PATH'-Fall
(bisher nur als manueller Hinweis, z.B. clangd/LLVM.LLVM im Praxistest)
statt den User manuell suchen zu lassen.
Diffstat (limited to 'bootstrap-win/neovim.ps1')
| -rw-r--r-- | bootstrap-win/neovim.ps1 | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/bootstrap-win/neovim.ps1 b/bootstrap-win/neovim.ps1 index 467463b..cc598de 100644 --- a/bootstrap-win/neovim.ps1 +++ b/bootstrap-win/neovim.ps1 | |||
| @@ -50,6 +50,40 @@ function Test-CommandExists([string]$Name) { | |||
| 50 | return [bool](Get-Command $Name -ErrorAction SilentlyContinue) | 50 | return [bool](Get-Command $Name -ErrorAction SilentlyContinue) |
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | function Find-BinaryDirectory([string]$Binary) { | ||
| 54 | # Sucht nach "<Binary>.exe" unter den ueblichen Installationswurzeln. | ||
| 55 | # Deckt den Fall ab, dass ein winget-Paket (v.a. im --silent-Modus) | ||
| 56 | # die PATH-Registrierung ausgelassen hat, obwohl es korrekt installiert | ||
| 57 | # wurde - beobachtet bei LLVM.LLVM/clangd. | ||
| 58 | $searchRoots = @( | ||
| 59 | $env:ProgramFiles, | ||
| 60 | ${env:ProgramFiles(x86)}, | ||
| 61 | (Join-Path $env:LOCALAPPDATA "Programs") | ||
| 62 | ) | Where-Object { $_ -and (Test-Path $_) } | ||
| 63 | |||
| 64 | foreach ($root in $searchRoots) { | ||
| 65 | $found = Get-ChildItem -Path $root -Recurse -Depth 4 -Filter "$Binary.exe" -File -ErrorAction SilentlyContinue | Select-Object -First 1 | ||
| 66 | if ($found) { | ||
| 67 | return $found.DirectoryName | ||
| 68 | } | ||
| 69 | } | ||
| 70 | |||
| 71 | return $null | ||
| 72 | } | ||
| 73 | |||
| 74 | function Add-ToUserPath([string]$Dir) { | ||
| 75 | $userPath = [Environment]::GetEnvironmentVariable("PATH", "User") | ||
| 76 | $entries = $userPath -split ";" | ||
| 77 | |||
| 78 | if ($entries -contains $Dir) { | ||
| 79 | return $false | ||
| 80 | } | ||
| 81 | |||
| 82 | [Environment]::SetEnvironmentVariable("PATH", "$userPath;$Dir", "User") | ||
| 83 | $env:PATH = "$env:PATH;$Dir" | ||
| 84 | return $true | ||
| 85 | } | ||
| 86 | |||
| 53 | function Install-WingetPackage([string]$Binary, [string]$Id) { | 87 | function Install-WingetPackage([string]$Binary, [string]$Id) { |
| 54 | if (Test-CommandExists $Binary) { | 88 | if (Test-CommandExists $Binary) { |
| 55 | Write-Skip $Binary | 89 | Write-Skip $Binary |
| @@ -67,8 +101,21 @@ function Install-WingetPackage([string]$Binary, [string]$Id) { | |||
| 67 | # Paket ist laut winget installiert, aber die Binary steht trotzdem | 101 | # Paket ist laut winget installiert, aber die Binary steht trotzdem |
| 68 | # nicht im PATH - z.B. weil der Installer (im --silent-Modus) die | 102 | # nicht im PATH - z.B. weil der Installer (im --silent-Modus) die |
| 69 | # PATH-Registrierung uebersprungen hat. winget search hilft hier | 103 | # PATH-Registrierung uebersprungen hat. winget search hilft hier |
| 70 | # nicht weiter, da das Paket ja gefunden wurde. | 104 | # nicht weiter, da das Paket ja gefunden wurde - stattdessen selbst |
| 71 | Write-Warn "$Id ist laut winget bereits installiert, aber '$Binary' wurde nicht gefunden. Vermutlich fehlt das Installationsverzeichnis im PATH - Installationsordner suchen (z.B. unter Program Files) und manuell zum PATH hinzufuegen." | 105 | # danach suchen und den User-PATH ergaenzen (dauerhaft + fuer diese |
| 106 | # Sitzung). | ||
| 107 | $dir = Find-BinaryDirectory $Binary | ||
| 108 | |||
| 109 | if ($dir) { | ||
| 110 | Add-ToUserPath $dir | Out-Null | ||
| 111 | if (Test-CommandExists $Binary) { | ||
| 112 | Write-Ok "$Id ('$Binary' in $dir gefunden, User-PATH ergaenzt)" | ||
| 113 | } else { | ||
| 114 | Write-Warn "$Id: $dir zum User-PATH hinzugefuegt, aber '$Binary' laesst sich immer noch nicht ausfuehren - manuell pruefen." | ||
| 115 | } | ||
| 116 | } else { | ||
| 117 | Write-Warn "$Id ist laut winget bereits installiert, aber '$Binary' wurde nicht gefunden und konnte auch nicht automatisch lokalisiert werden (durchsucht: Program Files, Program Files (x86), $env:LOCALAPPDATA\Programs). Installationsordner manuell suchen und zum PATH hinzufuegen." | ||
| 118 | } | ||
| 72 | } else { | 119 | } else { |
| 73 | Write-Warn "winget install $Id fehlgeschlagen (Binary '$Binary' nicht gefunden): $lastLine -- Pruefen mit: winget search $Id" | 120 | Write-Warn "winget install $Id fehlgeschlagen (Binary '$Binary' nicht gefunden): $lastLine -- Pruefen mit: winget search $Id" |
| 74 | } | 121 | } |
