Содержание
Профиль (лучшие практики)
Страница посвящена настройкам профиля PowerShell. Про лучшие практики я конечно махнул, это скорее про мои лучшие практики.
Итак, powershell-профилем называют файл конфигурации, который содержит базовые настройки и, например, пользовательские функции. Проще говоря, это ps1-файл, который загружается при открытии сессии powershell.
1. Создание профиля
По умолчанию файл профиля не существует. Если вы не создавали его ранее, то давайте сделаем это:
- Создаём новый профиль пользователя
New-Item $profile -ItemType File -Force
- Чтобы открываем его на редактирование в блокноте
notepad.exe $profile
Дополнительно
Для выполнения данных операций консоль должна быть открыта с правами администратора
Если планируем запускать из профиля скрипты или использовать их в консоли, то активируем опцию запуска скриптов без подписи:
Set-ExecutionPolicy RemoteSigned
Устанавливаем флаг «доверенный» на репозиторий «PSGallery» чтобы каждый раз не подтверждать установку из него:
Set-PSRepository -Name 'PSGallery' -InstallationPolicy Trusted
2. Winget
Подразумевается, что нами используется крайняя сборка Windows, где winget идёт из коробки. С его помощью мы установим нужное нам ПО. В ином случае рекомендую ознакомиться.
3. Устанавливаем нужное
- Заменяем (точнее добавляем рядом) устаревший Windows PowerShell на PowerShell
- Устанавливаем «стероиды» (oh-my-posh) для консоли
- Опционально (т.к. опять же в крайних сборках Windows установлен из коробки) устанавливаем терминал
winget install Microsoft.PowerShell
winget install JanDeDobbeleer.OhMyPosh
# winget install Microsoft.WindowsTerminal
4. Настройки
Устанавливаем необходимые модули:
Install-Module PSReadLine -Scope AllUsers -Force Install-Module -Name CompletionPredictor -Repository PSGallery -Scope AllUsers
Теперь открываем профиль на редактирование:
notepad.exe $profile
5. Профиль
# активируем автодополнения команд winget https://github.com/microsoft/winget-cli/blob/master/doc/Completion.md Register-ArgumentCompleter -Native -CommandName winget -ScriptBlock { param($wordToComplete, $commandAst, $cursorPosition) [Console]::InputEncoding = [Console]::OutputEncoding = $OutputEncoding = [System.Text.Utf8Encoding]::new() $Local:word = $wordToComplete.Replace('"', '""') $Local:ast = $commandAst.ToString().Replace('"', '""') winget complete --word="$Local:word" --commandline "$Local:ast" --position $cursorPosition | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) } } # активируем поддержку прогнозирования и подстановки Import-Module PSReadLine Set-PSReadLineOption -PredictionSource HistoryAndPlugin Set-PSReadLineOption -PredictionViewStyle ListView Set-PSReadLineOption -EditMode Windows Import-Module -Name CompletionPredictor # активируем oh-my-posh с темой slim # Get-PoshThemes - при желании посмотреть доступные oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/slim.omp.json" | Invoke-Expression