Поделиться через


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

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

  • Добавление псевдонимов, функций и переменных
  • Загрузка модулей
  • Создание приводов PowerShell
  • Выполнение произвольных команд
  • Изменение параметров предпочтения

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

Примечание.

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

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

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

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

  • AllUsersAllHosts
  • AllUsersCurrentHost
  • CurrentUserAllHosts
  • CurrentUserCurrentHost

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

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

PS> $PROFILE | Select-Object *
AllUsersAllHosts       : C:\Program Files\PowerShell\7\profile.ps1
AllUsersCurrentHost    : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts    : C:\Users\username\Documents\PowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\username\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
Length                 : 69

Следующая команда показывает расположения профилей по умолчанию в Ubuntu Linux.

$PROFILE | Select-Object *

AllUsersAllHosts       : /opt/microsoft/powershell/7/profile.ps1
AllUsersCurrentHost    : /opt/microsoft/powershell/7/Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts    : /home/username/.config/powershell/profile.ps1
CurrentUserCurrentHost : /home/username/.config/powershell/Microsoft.PowerShell_profile.ps1
Length                 : 67

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

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

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

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

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

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

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

В предыдущих статьях говорилось об использовании завершения вкладок, прогнозаторов команд и псевдонимов. В этих статьях показаны команды, используемые для загрузки необходимых модулей, создания пользовательских дополнителей, определения привязок клавиш и других параметров. Эти настройки — это тип, который вы хотите получить в каждом интерактивном сеансе 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]: ' } else { '' }
    if ($principal.IsInRole($adminRole)) {
        $prefix = "[ADMIN]:$prefix"
    }
    $body = 'PS ' + $PWD.path
    $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.
  • Добавляет завершение вкладки для инструмента dotnet CLI . Средство предоставляет параметры для разрешения аргументов командной строки. Блок скрипта для Register-ArgumentCompleter использует эту функцию для предоставления завершения вкладки.