about_Profiles

Краткое описание

Описывает создание и использование профиля PowerShell.

Подробное описание

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

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

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

В ней объясняется, как использовать параметр NoProfile консоли PowerShell (PowerShell.exe) для запуска PowerShell без профилей. Кроме того, он объясняет влияние политики выполнения PowerShell на профили.

Файлы профилей

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

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

  • Все пользователи, все узлы
    • Для Windows — $PSHOME\Profile.ps1.
    • Linux — /usr/local/microsoft/powershell/7/profile.ps1.
    • macOS — /usr/local/microsoft/powershell/7/profile.ps1
  • Все пользователи, текущий узел
    • Для Windows — $PSHOME\Microsoft.PowerShell_profile.ps1.
    • Linux — /usr/local/microsoft/powershell/7/Microsoft.Powershell_profile.ps1.
    • macOS — /usr/local/microsoft/powershell/7/Microsoft.Powershell_profile.ps1
  • Текущий пользователь, все узлы
    • Для Windows — $Home\Documents\PowerShell\Profile.ps1.
    • Linux — ~/.config/powershell/profile.ps1.
    • macOS — ~/.config/powershell/profile.ps1
  • Текущий пользователь, текущий узел
    • Для Windows — $Home\Documents\PowerShell\Microsoft.PowerShell_profile.ps1.
    • Linux — ~/.config/powershell/Microsoft.Powershell_profile.ps1.
    • macOS — ~/.config/powershell/Microsoft.Powershell_profile.ps1

Пути профиля включают следующие переменные:

  • Переменная $PSHOME хранит каталог установки для PowerShell.
  • Переменная $Home сохраняет домашний каталог текущего пользователя.

Другие программы, в которых размещается PowerShell, могут поддерживать собственные профили. Например, Visual Studio Code (VS Code) поддерживает следующие профили для конкретного узла.

  • Все пользователи, текущий узел — $PSHOME\Microsoft.VSCode_profile.ps1
  • Текущий пользователь, текущий узел — $Home\Documents\PowerShell\Microsoft.VSCode_profile.ps1

В справке PowerShell профиль CurrentUser, Current Host — это профиль, который чаще всего называется профилем PowerShell.

Примечание

В Windows расположение папки "Документы" можно изменить путем перенаправления папок или OneDrive. Не рекомендуется перенаправлять папку "Документы" в сетевую папку или включать ее в OneDrive. Перенаправление папки может привести к сбою сценариев профиля, а модули не загружались.

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

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

Чтобы просмотреть путь профиля, отобразите значение переменной $PROFILE . Для представления пути можно также использовать $PROFILE переменную в команде.

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

Например, $PROFILE переменная содержит следующие значения в консоли Windows PowerShell.

  • Текущий пользователь, текущий узел — $PROFILE
  • Текущий пользователь, текущий узел — $PROFILE.CurrentUserCurrentHost
  • Текущий пользователь, все узлы — $PROFILE.CurrentUserAllHosts
  • Все пользователи, текущий узел — $PROFILE.AllUsersCurrentHost
  • Все пользователи, все узлы — $PROFILE.AllUsersAllHosts

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

Чтобы просмотреть текущие значения переменной $PROFILE , введите:

$PROFILE | Get-Member -Type NoteProperty

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

notepad $PROFILE

Следующая команда определяет, был ли создан профиль "Все пользователи, все узлы" на локальном компьютере:

Test-Path -Path $PROFILE.AllUsersAllHosts

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

Чтобы создать профиль PowerShell, используйте следующий формат команды:

if (!(Test-Path -Path <profile-name>)) {
  New-Item -ItemType File -Path <profile-name> -Force
}

Например, чтобы создать профиль для текущего пользователя в текущем ведущем приложении PowerShell, используйте следующую команду:

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

В этой команде if инструкция запрещает перезапись существующего профиля. Замените значение переменной $PROFILE путем к файлу профиля, который требуется создать.

Примечание

Чтобы создать профили "Все пользователи" в Windows Vista и более поздних версиях Windows, запустите PowerShell с параметром "Запуск от имени администратора ".

Изменение профиля

Вы можете открыть любой профиль PowerShell в текстовом редакторе, например Блокнот.

Чтобы открыть профиль текущего пользователя в текущем ведущем приложении PowerShell в Блокноте, введите следующее:

notepad $PROFILE

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

notepad $PROFILE.AllUsersAllHosts

Чтобы применить изменения, сохраните файл профиля и перезапустите PowerShell.

Выбор профиля

Если вы используете несколько ведущих приложений, поместите элементы, используемые во всех ведущих приложениях, в профиль $PROFILE.CurrentUserAllHosts . Поместите элементы, относящиеся к ведущему приложению, например команду, которая задает цвет фона для ведущего приложения, в профиле, относящемся к основному приложению.

Если вы являетесь администратором, который настраивает PowerShell для многих пользователей, следуйте приведенным ниже рекомендациям.

  • Хранение общих элементов в $PROFILE.AllUsersAllHosts профиле
  • Хранение элементов, относящихся к основному приложению в $PROFILE.AllUsersCurrentHost профилях, относящихся к ведущему приложению
  • Хранение элементов для определенных пользователей в профилях для конкретных пользователей

Обязательно проверьте документацию ведущего приложения для любой специальной реализации профилей PowerShell.

Использование профиля

Многие элементы, создаваемые в PowerShell, и большинство выполняемых команд влияют только на текущий сеанс. По завершении сеанса элементы удаляются.

Команды и элементы, относящиеся к сеансу, включают переменные, переменные предпочтения, псевдонимы, функции, команды (за исключением Set-ExecutionPolicy) и модули PowerShell, добавляемые в сеанс.

Чтобы сохранить эти элементы и сделать их доступными во всех будущих сеансах, добавьте их в профиль PowerShell.

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

Запуск профиля

При открытии файла профиля он пуст. Однако их можно заполнить переменными, псевдонимами и командами, которые вы часто используете.

Вот несколько предложений, которые по-разучатся.

Добавление команд, упрощающих открытие профиля

Это особенно полезно, если вы используете профиль, отличный от профиля "Текущий пользователь, текущий узел". Например, добавьте следующую команду:

function Pro {notepad $PROFILE.CurrentUserAllHosts}

Добавление функции, в которой перечислены псевдонимы для любого командлета.

function Get-CmdletAlias ($cmdletname) {
  Get-Alias |
    Where-Object -FilterScript {$_.Definition -like "$cmdletname"} |
      Format-Table -Property Definition, Name -AutoSize
}

Настройка консоли

function Color-Console {
  $Host.ui.rawui.backgroundcolor = "white"
  $Host.ui.rawui.foregroundcolor = "black"
  $hosttime = (Get-ChildItem -Path $PSHOME\PowerShell.exe).CreationTime
  $hostversion="$($Host.Version.Major)`.$($Host.Version.Minor)"
  $Host.UI.RawUI.WindowTitle = "PowerShell $hostversion ($hosttime)"
  Clear-Host
}
Color-Console

Добавление настраиваемого запроса PowerShell

function Prompt
{
$env:COMPUTERNAME + "\" + (Get-Location) + "> "
}

Дополнительные сведения о командной строке PowerShell см. в about_Prompts.

Параметр NoProfile

Чтобы запустить PowerShell без профилей, используйте параметр NoProfilePowerShell.exeпрограммы, запускающей PowerShell.

Для начала откройте программу, которая может запустить PowerShell, например Cmd.exe или PowerShell. Диалоговое окно "Запуск" также можно использовать в Windows.

Тип:

PowerShell -NoProfile

Полный список параметров PowerShell.exe введите:

PowerShell -?

Профили и политика выполнения

Политика выполнения PowerShell определяет, можно ли выполнять скрипты и загружать файлы конфигурации, включая профили. Политика ограниченного выполнения используется по умолчанию. Это предотвращает выполнение всех скриптов, включая профили. Если вы используете политику с ограниченным доступом, профиль не запускается и его содержимое не применяется.

Команда Set-ExecutionPolicy задает и изменяет политику выполнения. Это одна из немногих команд, которые применяются во всех сеансах PowerShell, так как значение сохраняется в реестре. Его не нужно задавать при открытии консоли, и вам не нужно хранить Set-ExecutionPolicy команду в профиле.

Профили и удаленные сеансы

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

Чтобы запустить профиль в сеансе, используйте командлет Invoke-Command .

Например, следующая команда запускает профиль "Текущий пользователь, текущий узел" с локального компьютера в сеансе.$s

Invoke-Command -Session $s -FilePath $PROFILE

Следующая команда запускает профиль "Текущий пользователь, текущий узел" с удаленного компьютера в сеансе.$s $PROFILE Так как переменная не заполнена, команда использует явный путь к профилю. Мы используем оператор dot sourcing, чтобы профиль выполнялся в текущей области на удаленном компьютере, а не в собственной области.

Invoke-Command -Session $s -ScriptBlock {
  . "$HOME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"
}

После выполнения этой команды доступны команды, добавляемые профилем в сеанс $s.

См. также раздел