Comments 19
А надо ли тянуть сторонний модуль?
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete достаточно, аналог readline (а может и readline) уже зашит в powershell, а для прочих красивостей можно поставить oh-my-posh.

А вообще сколько powershell не настраивай, даже несмотря на объектную модель и всякие удобства, всё равно оно страшное.
А надо ли тянуть сторонний модуль?
Но ведь Set-PSReadlineKeyHandler это и есть команда из PSReadLine
А вообще сколько powershell не настраивай, даже несмотря на объектную модель и всякие удобства, всё равно оно страшное.
Тут с Вами определенно согласен.
уже зашит в powershell
Да, модуль зашит в PowerShell, но по какой-то причине вшитый модуль у меня не завёлся и отказывался обновляться. Пришлось удалять и ставить с нуля. Так как проблема наблюдалась на двух машинах - решил статью с установки начать...
Также, насколько мне известно, на Win11 была (или есть) проблема с отсутствием данного модуля в PowerShell 5.1.
А файлы-то разные! По частям и итоговый.
PSReadline v2.0 включен и достаточно адекватно настроен по умолчанию даже в Windows Powershell (v5.1), не говоря о Powershell v7.*
Другое дело, что его есть возможность обновить до v2.4.5 командой PS> Install-Module PSReadline -SkipPublisherCheck -Force
Но и после этого Powershell командлет Set-PSReadLineOption продолжает утверждать, что ему неизвестны ключи -PredictionSource и -PredictionViewStyle и много чего ещё.
Возможно, у меня продолжает работать устаревшая версия. Чтобы заработала свежая версия, нужно предпринять ещё какие-то нетривиальные телодвижения.
Так что или я не понимаю, откуда начал автор - явно с далеко не тривиальных настроек, о которых умолчал. Или... склоняюсь к предположению, что все несуществующие ключи в статье - ИИ-галлюцинация.
PSReadline v2.0 включен и достаточно адекватно настроен по умолчанию даже в Windows Powershell (v5.1), не говоря о Powershell v7.*
Далеко не во все, модуль достаточно проблемный. По поводу "адекватности" настройки очень спорно, нормальной реализации копирования/вставки нет, поиска по истории - аналогично. "Тыкаюсь по 100 раз, так как потерял команду".
Другое дело, что его есть возможность обновить до v2.4.5 командой
PS> Install-Module PSReadline -SkipPublisherCheck -Force
Не поймите меня неправильно, повторюсь, модуль проблемный. Тестировал на двух машинах, он отказывался обновляться. Пришлось сносить и ставить уже обновлённый.
На Win 11 был схожий "прикол". Модуль установлен, но при попытке обновления была ошибка в стиле: Module 'PSReadLine' was not installed
Но и после этого Powershell командлет
Set-PSReadLineOption продолжает утверждать, что ему неизвестны ключи -PredictionSource и -PredictionViewStyle и много чего ещё.
Да, Вы верно выразились ниже, работает версия 2.0.0, т.е. устаревшая. Я повторно прогнал тесты по своему конфигу на двух машинах, он работает корректно, не выдавая ошибок с перечисленными ключами.
Или... склоняюсь к предположению, что все несуществующие ключи в статье - ИИ-галлюцинация.
Ваше предположение основано на том, что у Вас не обновился модуль для корректной работы? Вы можете зайти на GitHub, ссылку на который я прикрепил в конце, найти всю информацию по модулю. Если же у Вас нет времени - прикреплю скриншот с сайта Microsoft...
Скрин тут:

Ну вот и начали бы с изложения этой истории и инструкции, как обновить модуль до релевантной версии.
Install-Module PSReadline -SkipPublisherCheck -Force
Кажется, я забыл ключ -AllowClobber , c ним должно заработать.
Проблемность модуля PSReadLine в том, что он обычно загружен в терминальную сессию PowerShell. Стало быть, его папки надо удалять ручками, прибив все такие терминалы.
Но: этот модуль поставляется в образе Windows - то есть удалить версию 2.0.0 можно только от имени TrustedInstaller. Но после следующего Feature Update она опять прилетит в WinSxS.
Все такие эти модули - включая Pester, PowerShellGet и сам PackageManagement - проблемные. Потому что в PSGallery они регулярно обновляются, а в образе винды прибиты гвоздями.
Плюс, сложные отношения в модульных системах PowerShell (v7 +) и Windows PowerShell (v5.1). Первый видит модули второго, но не наоборот. При этом у каждого по две локации (юзерская и общесистемная области видимости), из которых модули становятся автоматически доступны для импорта.
Есть рекомендуемый путь их апдейтнуть (из правильной версии и в правильную область видимости), он легко гуглится.
Я б на Вашем месте эту инфу перепроверил и перевыпустил бы обновлённый пост.
Спасибо за полезное дополнение. Дело вот в чем…
Вся эта проблемность модуля крайне непостоянна, о чем я уже говорил. И ее непостоянность кочует от компьютера к компьютеру в самых разных проявлениях. После диалога с Вами мне стало интересно поглядеть еще возможные вариации «проблем», на виртуалке с PS5.1, модуль обновился «с пол пинка», чего нельзя сказать о двух личных машинах.
У меня есть предположение, что проблема может отличаться на разных версиях Win10 и Win11, из-за чего я решил не включать «все вариации проблем».
Постараюсь дополнительно потестить завтра и внести правки, но есть предположение, что все возможные проблемы перечислить банально не получится. Спасибо!
Windows 10 труп, а тем более несвежие его версии.
Какие-то старые билды поставлялись с ранними версиями PSReadLine, модуль был реально бажный в powershell.exe - а кроссплатформанный pwsh.exe и Windows Terminal тогда ещё приходилось доустанавливать с гитхаба. Здесь ниже уже писали об этом баге - пропадании заглавных букв.
Емнип, этот баг присутствовал и на тех же ранних билдах Windows 11 - точнее, в Windows Powershell 5.1, билд которого гвоздями приколочен к фичеапдейту винды. MS это поправили, но ждать пришлось долго. А староверы об исправлении так и не узнали )
$env:path = "$env:path,C:\Program Files\Git\usr\bin"
И у вас доступны команды nano, grep и прочее почти все что доступно в консоли linux.
Можно добавить на постоянку, хотя пошик в целом удобен, но не как консоль.
Пользуюсь таким конфигом powershell https://github.com/tony-sol/.config/tree/master/powershell уже достаточно давно, поэтому к сожалению не нашел для себя ничего нового :c
...мне очень не хватает аналога $RPROMPT из zsh)
ну дык, как писали выше oh-my-posh в помощь

А можете подсказать как им пользоваться? Там куча файлов - их надо где-то разместить? Если с json вроде понятно - в каталог PS, то остальное куда?
Нужно все файлы из репы по ссылке (в директории powershell) поместить в %USERPROFILE%\Documents\PowerShell. Точкой входа является Profile.ps1.
На первый запуск будет жаловаться на отсутствие модулей, устанавливаются они просто - Install-Module имя-модуля -Scope CurrentUser.
Используемые модули (со звездочкой - необязательные, я их использую интерактивно, если не нужно можно удалить строку с импортом из Modules.ps1):
Terminal-Icons - просто набор иконок
PSReadLine - сабж статьи)
CompletionPredictor - улучшенное автодополнение для PSReadLine
*ps-menu - рисует интерактивные меню
posh-git - аналог git-aware-prompt для bash - если текущая директория содержит репу, рисует статус в промпте
*Microsoft.PowerShell.SecretManagement - https://learn.microsoft.com/ru-ru/powershell/module/microsoft.powershell.secretmanagement
*Microsoft.PowerShell.SecretStore - https://learn.microsoft.com/ru-ru/powershell/module/microsoft.powershell.secretstore
*Microsoft.PowerShell.ConsoleGuiTools - так же для рисования интерактивных меню
*Microsoft.WinGet.Client - обертка над клиентом
winget*Microsoft.WinGet.Configuration - обертка для конфигурации
winget*Microsoft.WinGet.DSC - обертка над winget dsc
В том PSReadLine, что идёт из коробки была неприятная багуля с заглавными буквами, после сноса и установки 2.2.6 всё что тут указано у меня работает из коробки, ничего не настраивал.
особенно после работы в "продвинутых" терминалы в Linux или macOS.
Вы уж меня простите но из коробки терминал macOS - это то еще фуфло (ну или распиареный миф). Вот у маджаро из коробки крутой zsh а не пустой как у мака.
Делаем PowerShell более удобным: настройка PsReadLine