Настройка среды оболочки

Профиль PowerShell — это скрипт, который запускается при запуске PowerShell. Профиль можно использовать для настройки среды. Вы можете:

  • добавлять псевдонимы, функции и переменные;
  • загружать модули;
  • создавать диски PowerShell;
  • выполнять произвольные команды;
  • изменять предпочтительные параметры.

Размещение этих параметров в профиле гарантирует, что они будут доступны при каждом запуске PowerShell в системе.

Примечание.

Чтобы запусткать скрипты в Windows, необходимо установить для политики выполнения PowerShell значение не ниже RemoteSigned. Политики выполнения не применяются к macOS и Linux. Дополнительные сведения см. в разделе about_Execution_Policies.

Переменная $PROFILE

Автоматическая переменная $PROFILE содержит пути к профилям PowerShell, доступным в текущем сеансе.

Доступны четыре профиля для поддержки различных областей пользователей и разных узлов PowerShell. Полные пути для каждого скрипта профиля хранятся в следующих свойствах элементов $PROFILE.

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

Вы можете создать скрипты профилей, которые выполняются для всех пользователей или только для одного пользователя CurrentUser. Профили CurrentUser хранятся в домашнем каталоге пользователя.

Также существуют профили, которые выполняются для всех узлов PowerShell или для определенных узлов. Скрипт профиля для каждого узла PowerShell имеет уникальное имя для этого узла. Например, имя файла стандартного узла консоли в Windows или приложения терминала по умолчанию на других платформах — Microsoft.PowerShell_profile.ps1. Имя файла для Visual Studio Code (VS Code) — Microsoft.VSCode_profile.ps1.

Дополнительные сведения см. в разделе about_Profiles.

По умолчанию ссылка на переменную $PROFILE возвращает путь к профилю "Текущий пользователь, текущий узел". Доступ к пути для других профилей можно получить с помощью свойств переменной $PROFILE. Например:

PS> $PROFILE
C:\Users\user1\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
PS> $PROFILE.AllUsersAllHosts
C:\Program Files\PowerShell\7\profile.ps1

Создание личного профиля

При первой установке PowerShell в системе файлы скриптов профилей и каталоги, в которых они находятся, не существуют. Следующая команда создает файл скрипта профиля "Текущий пользователь, текущий узел", если его не существует.

if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}

Параметр Force командлета New-Item создает необходимые папки, если они не существуют. После создания файла скрипта можно использовать любой подходящий редактор для настройки среды оболочки.

Добавление настроек в профиль

В предыдущих статьях говорилось о завершении по клавише TAB, прогнозировании команд и псевдонимах. В этих статьях показаны команды, используемые для загрузки необходимых модулей, создания пользовательских средств заполнения, определения настраиваемых сочетаний клавиш и других параметров. Это типы настроек, которые должны быть доступны в каждом интерактивном сеансе PowerShell. Скрипт профиля — это то место, в котором находятся эти параметры.

Самый простой способ изменить скрипт профиля — открыть файл в подходящем редакторе кода. Например, следующая команда открывает профиль в VS Code.

code $PROFILE

Вы также можете использовать notepad.exe в Windows, vi в Linux или любой другой текстовый редактор.

Следующий скрипт профиля содержит примеры для многих настроек, упомянутых в предыдущих статьях. Вы можете использовать любой из этих параметров в собственном профиле.

## Map PSDrives to other registry hives
if (!(Test-Path HKCR:)) {
    $null = New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
    $null = New-PSDrive -Name HKU -PSProvider Registry -Root HKEY_USERS
}

## Customize the prompt
function prompt {
    $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
    $principal = [Security.Principal.WindowsPrincipal] $identity
    $adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator

    $prefix = $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
                elseif ($principal.IsInRole($adminRole)) { "[ADMIN]: " }
                else { '' })
    $body = 'PS ' + $(Get-Location)
    $suffix = $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
    $prefix + $body + $suffix
}

## Create $PSStyle if running on a version older than 7.2
## - Add other ANSI color definitions as needed

if ($PSVersionTable.PSVersion.ToString() -lt '7.2.0') {
    # define escape char since "`e" may not be supported
    $esc = [char]0x1b
    $PSStyle = [pscustomobject]@{
        Foreground = @{
            Magenta = "${esc}[35m"
            BrightYellow = "${esc}[93m"
        }
        Background = @{
            BrightBlack = "${esc}[100m"
        }
    }
}

## Set PSReadLine options and keybindings
$PSROptions = @{
    ContinuationPrompt = '  '
    Colors             = @{
        Operator         = $PSStyle.Foreground.Magenta
        Parameter        = $PSStyle.Foreground.Magenta
        Selection        = $PSStyle.Background.BrightBlack
        InLinePrediction = $PSStyle.Foreground.BrightYellow + $PSStyle.Background.BrightBlack
    }
}
Set-PSReadLineOption @PSROptions
Set-PSReadLineKeyHandler -Chord 'Ctrl+f' -Function ForwardWord
Set-PSReadLineKeyHandler -Chord 'Enter' -Function ValidateAndAcceptLine

## Add argument completer for the dotnet CLI tool
$scriptblock = {
    param($wordToComplete, $commandAst, $cursorPosition)
    dotnet complete --position $cursorPosition $commandAst.ToString() |
        ForEach-Object {
            [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
        }
}
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock $scriptblock

Этот скрипт профиля содержит примеры для следующей настройки:

  • Добавляет два новых диска PSDrives для других кустов корневого реестра.
  • Создает настраиваемую строку запроса, которая изменяется, если вы работаете в сеансе с повышенными привилегиями.
  • Настраивает PSReadLine и добавляет настраиваемое сочетание клавиш. Параметры цвета используют функцию $PSStyle для определения параметров цвета ANSI.
  • Добавляет завершение по клавише TAB для средства dotnet CLI. Средство предоставляет параметры для разрешения аргументов командной строки. Блок скрипта для Register-ArgumentCompleter использует эту функцию для реализации функции завершения по клавише TAB.