From cd80888018a5c3b281e252e7ae57610a8d8407a8 Mon Sep 17 00:00:00 2001 From: NEXT579 Date: Fri, 11 Sep 2026 20:53:23 +0300 Subject: [PATCH] =?UTF-8?q?Windows:=20ollama=20pull=20=D1=80=D0=BE=D0=BD?= =?UTF-8?q?=D1=8F=D0=BB=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20=D0=B2=20?= =?UTF-8?q?PowerShell=205.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit При $ErrorActionPreference = Stop любая строка stderr внешней программы, перенаправленная в $null, становится ошибкой NativeCommandError. Ollama пишет прогресс pulling manifest в stderr, скрипт падал на первой модели. Внешние команды теперь идут через Invoke-Quiet: локальная мягкая политика ошибок, наружу только код возврата. Ошибка ollama cp тоже не молчит. --- setup.ps1 | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/setup.ps1 b/setup.ps1 index c1ce41f..8581c11 100644 --- a/setup.ps1 +++ b/setup.ps1 @@ -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 {