Pull to refresh

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...

Скрин тут:
Скришнот из статьи Microsoft по модулю PsReadLine
Скришнот из статьи Microsoft по модулю PsReadLine

Ну вот и начали бы с изложения этой истории и инструкции, как обновить модуль до релевантной версии.

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.

Можно добавить на постоянку, хотя пошик в целом удобен, но не как консоль.

ну дык, как писали выше oh-my-posh в помощь

Да, там есть такой функционал, но я не люблю ни oh-my-posh, ни oh-my-zsh, ни другие фреймворки для шелла. Проще тогда уж на starship перейти кмк

А можете подсказать как им пользоваться? Там куча файлов - их надо где-то разместить? Если с json вроде понятно - в каталог PS, то остальное куда?

Нужно все файлы из репы по ссылке (в директории powershell) поместить в %USERPROFILE%\Documents\PowerShell. Точкой входа является Profile.ps1.

На первый запуск будет жаловаться на отсутствие модулей, устанавливаются они просто - Install-Module имя-модуля -Scope CurrentUser.

Используемые модули (со звездочкой - необязательные, я их использую интерактивно, если не нужно можно удалить строку с импортом из Modules.ps1):

В том PSReadLine, что идёт из коробки была неприятная багуля с заглавными буквами, после сноса и установки 2.2.6 всё что тут указано у меня работает из коробки, ничего не настраивал.

особенно после работы в "продвинутых" терминалы в Linux или macOS.

Вы уж меня простите но из коробки терминал macOS - это то еще фуфло (ну или распиареный миф). Вот у маджаро из коробки крутой zsh а не пустой как у мака.

Sign up to leave a comment.

Articles