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 }
|
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,
|
# · Классическая (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")
|
@("nemotron-3-super:cloud", "claude-3-5-haiku", "optional")
|
||||||
)
|
)
|
||||||
foreach ($p in $pairs) {
|
foreach ($p in $pairs) {
|
||||||
& ollama pull $p[0] 2>$null | Out-Null
|
$rc = Invoke-Quiet ollama pull $p[0]
|
||||||
if ($LASTEXITCODE -ne 0) {
|
if ($rc -ne 0) {
|
||||||
if ($p[2] -eq "optional") {
|
if ($p[2] -eq "optional") {
|
||||||
Warn "$($p[0]) недоступна на твоём тарифе Ollama, пропускаю (нужен Pro или Max)."
|
Warn "$($p[0]) недоступна на твоём тарифе Ollama, пропускаю (нужен Pro или Max)."
|
||||||
continue
|
continue
|
||||||
@@ -372,7 +386,8 @@ if ($brain -eq "ollama" -or $brain -eq "both") {
|
|||||||
Write-Host " Открой окно Ollama (иконка ламы) -> Sign in, затем запусти команду снова."
|
Write-Host " Открой окно Ollama (иконка ламы) -> Sign in, затем запусти команду снова."
|
||||||
return
|
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])"
|
Ok "$($p[1]) -> $($p[0])"
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user