Windows: ollama pull ронял скрипт в PowerShell 5.1
При $ErrorActionPreference = Stop любая строка stderr внешней программы, перенаправленная в $null, становится ошибкой NativeCommandError. Ollama пишет прогресс pulling manifest в stderr, скрипт падал на первой модели. Внешние команды теперь идут через Invoke-Quiet: локальная мягкая политика ошибок, наружу только код возврата. Ошибка ollama cp тоже не молчит.
This commit is contained in:
@@ -49,6 +49,20 @@ function Read-Json($path) {
|
||||
try { Get-Content $path -Raw -Encoding UTF8 | ConvertFrom-Json } catch { $null }
|
||||
}
|
||||
|
||||
# Windows PowerShell 5.1 при $ErrorActionPreference = "Stop" превращает любую
|
||||
# строку stderr внешней программы в ошибку, если поток перенаправлен в $null.
|
||||
# Ollama пишет прогресс "pulling manifest" именно в stderr, и первая же строка
|
||||
# роняла скрипт. Поэтому внешние команды зовём через эту обёртку: внутри неё
|
||||
# своя, мягкая политика ошибок, наружу уходит только код возврата.
|
||||
function Invoke-Quiet {
|
||||
$ErrorActionPreference = "SilentlyContinue"
|
||||
$exe = $args[0]
|
||||
$rest = @()
|
||||
if ($args.Count -gt 1) { $rest = @($args[1..($args.Count - 1)]) }
|
||||
& $exe @rest 2>&1 | Out-Null
|
||||
return $LASTEXITCODE
|
||||
}
|
||||
|
||||
# ---------- Где приложение и где его данные ----------
|
||||
# Сборок две, и ведут они себя по-разному.
|
||||
# · Классическая (Squirrel): %LOCALAPPDATA%\AnthropicClaude\app-<версия>\claude.exe,
|
||||
@@ -362,8 +376,8 @@ if ($brain -eq "ollama" -or $brain -eq "both") {
|
||||
@("nemotron-3-super:cloud", "claude-3-5-haiku", "optional")
|
||||
)
|
||||
foreach ($p in $pairs) {
|
||||
& ollama pull $p[0] 2>$null | Out-Null
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
$rc = Invoke-Quiet ollama pull $p[0]
|
||||
if ($rc -ne 0) {
|
||||
if ($p[2] -eq "optional") {
|
||||
Warn "$($p[0]) недоступна на твоём тарифе Ollama, пропускаю (нужен Pro или Max)."
|
||||
continue
|
||||
@@ -372,7 +386,8 @@ if ($brain -eq "ollama" -or $brain -eq "both") {
|
||||
Write-Host " Открой окно Ollama (иконка ламы) -> Sign in, затем запусти команду снова."
|
||||
return
|
||||
}
|
||||
& ollama cp $p[0] $p[1] | Out-Null
|
||||
$rc = Invoke-Quiet ollama cp $p[0] $p[1]
|
||||
if ($rc -ne 0) { Warn "Не смог создать псевдоним $($p[1]) для $($p[0])."; continue }
|
||||
Ok "$($p[1]) -> $($p[0])"
|
||||
}
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user