Уверен, пользователи, занимающие автоматизацией задач в Bash, знают о файлах .profile, .bashrc и .bash_profile. Знают о том, что это за файлы и как их использовать, чтобы сделать работу в командной строке удобнее. Однако часть пользователей PowerShell не подозревают, что их инструмент обладает схожими возможностями - поддержкой профилей.
Профиль PowerShell это скрипт, который запускается вместе с PowerShell, а значит он может использоваться как логон-скрипт для настройки среды. Это значит, что в профиль можно добавить собственные команды, псевдонимы, функции, переменные, модули, диски PowerShell, а так же другие специфические элементы, которые будут доступны в каждой новой сессии без необходимости импортировать или пересоздавать их повторно.
PowerShell поддерживает несколько стандартных файлов профилей, которые перечислены далее в порядке приоритета, где первый профиль имеет наивысший приоритет.
Описание | Путь к файлу профиля |
---|
Все пользователи, все хосты | $PSHOME\Profile.ps1 |
Все пользователи, текущий хост | $PSHOME\Microsoft.PowerShell_profile.ps1 |
Текущий пользователь, все хосты | $Home\[My ]Documents\PowerShell\Profile.ps1 |
Текущий пользователь, текущий хост | $Home\[My ]Documents\PowerShell\Microsoft.PowerShell_profile.ps1 |
В приведённых именах файлов профилей использованы следующие переменные:
$PSHOME
- переменная, хранящая путь к установочной директории PowerShell;$Home
- переменная, хранящая путь к домашней директории текущего пользователя.
Если обратиться к справке PowerShell, то в ней под понятием “ваш профиль PowerShell”, как правило, будет подразумеваться профиль “Текущий пользователь, текущий хост”.
Кроме перечисленных стандартных профилей, свои профили могут иметь программы, запускающие PowerShell, например, Visual Studio Code поддерживает следующие профили:
Описание | Путь к файлу профиля |
---|
Все пользователи, текущий хост | $PSHOME\Microsoft.VSCode_profile.ps1 |
Текущий пользователи, текущий хост | $Home[My ]Documents\PowerShell\Microsoft.VSCode_profile.ps1 |
Не обязательно запоминать все пути к профилям PowerShell, потому что они хранятся в автоматической переменной $PROFILE
и их всегда можно посмотреть:
$PROFILE | Get-Member -Type NoteProperty
Описание | Имя |
---|
Текущий пользователь, текущий хост | $PROFILE или $PROFILE.CurrentUserCurrentHost |
Текущий пользователь, все хосты | $PROFILE.CurrentUserAllHosts |
Все пользователи, текущий хост | $PROFILE.AllUsersCurrentHost |
Все пользователи, все хосты | $PROFILE.AllUsersAllHosts |
Поскольку значения переменной $PROFILE
меняются для каждого пользователя и для каждого приложения, запускающего PowerShell, следует всегда обращаться к значениям переменной, а не задавать жёстко пути к файлам профилей. Например, для того чтобы открыть файл вашего профиля PowerShell в Блокноте, выполните команду:
notepad $PROFILE
Из приведённой ранее таблицы видно, что обращение к переменной $PROFILE
по имени равнозначно обращению к её свойству:
notepad $PROFILE.CurrentUserCurrentHost
В результате в Блокноте будет открыт файл вашего профиля PowerShell и при необходимости вы сможете внести в него требующиеся изменения.
Но как проверить, какие файлы профилей существуют, не пытаясь открыть каждый из них? Для этого запустите следующий скрипт:
"CurrentUserCurrentHost", "CurrentUserAllHosts", "AllUsersCurrentHost", "AllUsersAllHosts" | % { $profile.$_ } | Test-Path
В этом фрагменте кода использован символ %
- это алиас для командлета ForEach-Object
.
Если требующийся файл профиля не существует, можете создать его, не покидая командной строки PowerShell. Например, создать файл вашего профиля можно так:
If (!(Test-Path -Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
}
Стоит иметь в виду, что для создания профилей, относящихся ко всем пользователям, потребуется запустить PowerShell с правами администратора.
И всё-таки, какие из профилей использоваться для настройки среды PowerShell?
Если вы используете разные программы, запускающие PowerShell, но хотите иметь в каждом сеансе одинаковые настройки среды, поместите настройки в профиль $PROFILE.CurrentUserAllHosts
.
Если вы системный администратор и производите настройку PowerShell для нескольких пользователей, то придерживайтесь следующих правил:
- Общие настройки для всех пользователей храните в профиле
$PROFILE.AllUsersAllHosts
; - Настройки, специфичные для приложений, запускающих PowerShell, храните в профиле
$PROFILE.AllUsersCurrentHost
; - Настройки, специфичные для каждого пользователя, храните в профиле
$PROFILE.CurrentUserCurrentHost
.
Может возникнуть ситуация, когда применение настроек профиля не желательно. В этом случае не надо переименовывать файл профиля и удалять его содержание, достаточно запустить PowerShell с параметром -NoProfile
:
PowerShell -NoProfile
Если до момента прочтения этого материалы вы не знали о существовании профилей PowerShell, или хоть однажды задавались вопросом об аналоге файла .bashrc
в PowerShell, или знали, но не хотели разбираться в том, как работают профили PowerShell, то я рекомендую начать использовать профили прямо сейчас, этосделать свою работу по автоматизации задач удобнее.