帖子内容
Создаем интерактивный TUI-интерфейс в скриптах Windows Terminal в Windows 11 полностью поддерживает ANSI escape-последовательности. Забудьте о статичных скриптах: с -NoNewline и управляющими кодами консоль превращается в живой интерфейс. 1. Рисуем Progress Bar в одной строке Код ниже обновляет одну и ту же строку вместо спама в вывод. $total = 100 foreach ($i in 1..$total) { $percent = ($i / $total) * 100 # `e[1G` перемещает курсор в начало строки Write-Host -NoNewline "`e[1GЗагрузка: [" Write-Host -NoNewline ("#" * ($i/2)).PadRight(50, ' ') Write-Host -NoNewline ("] {0}%" -f $percent) Start-Sleep -Milliseconds 50 } Write-Host "" # Перенос строки в конце 2. Интерактивное меню на стрелках (TUI) $options = @("Запустить сервер", "Показать статус", "Выход") $selected = 0 $key = $null # Скрываем курсор Write-Host "`e[?25l" while ($key -ne 13) { # Пока не нажат Enter for ($i=0; $i -lt $options.Count; $i++) { Write-Host -NoNewline "`e[$($i+1);1H" # Перемещаем курсор if ($i -eq $selected) { Write-Host -NoNewline "`e[7m> $($options[$i])`e[0m" # Инверсия цвета } else { Write-Host -NoNewline " $($options[$i]) " } } $key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown").VirtualKeyCode switch ($key) { 38 { if ($selected -gt 0) { $selected-- } } # Вверх 40 { if ($selected -lt $options.Count - 1) { $selected++ } } # Вниз } } # Возвращаем курсор и чистим экран Write-Host "`e[?25h`e[2J" Write-Host "Выбрано: $($options[$selected])" Главный секрет: код e[1;1H всегда сбрасывает позицию вывода в верхний левый угол, позволяя перерисовывать окно полностью без мерцания. #скрипт@pcTeapot