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

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

Аналогом профилей PowerShell в Linux являются файлы .profile , .bashrc , .bash_profile , используемые для автозапуска скриптов при запуске командной оболочки.

В Windows PowerShell есть несколько путей для хранения профилей. В следующей таблице все пути перечислены в порядке приоритета (сначала идет профиль с наивысшим приоритетом):

Путь Описание
$PSHOMEProfile.ps1 Все пользователи, все приложения (AllUsersAllHosts)
$PSHOMEMicrosoft.PowerShell_profile.ps1 Все пользователи, текущее приложение (AllUsersCurrentHost)
$HomeDocumentsPowerShellProfile.ps1 Текущий пользователь, все приложения (CurrentUserAllHosts)
$HomeDocumentsPowerShellMicrosoft.PowerShell_profile.ps1 Текущий пользователь, текущее приложения (CurrentUserCurrentHost)

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

Чтобы найти свой PowerShell профиль, достаточно выполнить команду $Profile . По умолчанию путь к PowerShell профилю пользователя выглядит так: C:UsersusernameDocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1

  • В Windows PowerShell переменная окружения $Home ссылается на каталог профиля текущего пользователя ( C:Usersusername ). $PsHome – указывает на каталог установки PowerShell ( C:WindowsSystem32WindowsPowerShellv1.0 ).
  • В новых версиях PowerShell Core 7.x переменная $PSHome ссылается на C:Program FilesPowerShell7 .
  • В PowerShell Core на Linux профиль хранится в файле /opt/microsoft/powershell/profile.ps1 или /usr/local/microsoft/powershell/7/profile.ps1 .

У PowerShell ISE есть собственные файлы профилей:

$PsHomeMicrosoft.PowerShellISE_profile.ps1 Все пользователи
$HomeDocumentsWindowsPowerShellMicrosoft.PowerShellISE_profile.ps1 Текущий пользователь

Свои файлы профилей есть и у Visual Studio Code ( при использовании в качестве редактора для PowerShell скриптов ):

$PSHOMEMicrosoft.VSCode_profile.ps1 Все пользователи
$HomeDocumentsPowerShellMicrosoft.VSCode_profile.ps1 Текущий пользователь

Все пути к профилям содержаться в переменные окружения $PROFILE.

$PROFILE | Get-Member -Type NoteProperty

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

$PROFILE.CurrentUserCurrentHost

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

Test-Path -Path $PROFILE.CurrentUserCurrentHost

В данном примере файл профиля PowerShell для текущего пользователя не создан (False).

По умолчанию файлы профилей PowerShell в Windows не созданы .

PS1 файлы профилей PowerShell

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

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

Вы можете отредактировать с помощью любого текстового редактора. Например, вы можете отредактировать файл профиля с помощью:

  • Блокнота: notepad $profile
  • PowerShell ISE: ise $profile.CurrentUserCurrentHost
  • Visual Studio Code: code $profile.CurrentUserCurrentHost

Попробуем настроить наш PowerShell профиль. Настроим цвет, заголовок консоли (выведем версию PowerShell ), изменим каталог PowerShell по-умолчанию, выведем имя компьютера в строке PS:

function CustomizePSConsole {
$Host.ui.rawui.foregroundcolor = "cyan"
$hostversion="$($Host.Version.Major)`.$($Host.Version.Minor)"
$Host.UI.RawUI.WindowTitle = "This is PowerShell $hostversion"
Set-Location 'C:PS'
Clear-Host
}
CustomizePSConsole

Выведем имя компьютера в строке PS:

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

Можно, например, подключить сетевой диск:

New-PSDrive –Name “Tools” –PSProvider “FileSystem” –Root “\FS01Tools”

добавляем функции в профиль PowerShell Microsoft.PowerShell_profile.ps1

Если вы часто используете PowerShell для управления тенатом Azure или Microsoft 365, можно при каждом запуске консоли запрашивать, нужно ли сразу подключиться к облачному сервису. Следующий скрипт, если вы ответите Y, запросит ваш пароль и подключит вас к вашему тенанту Exchange Online :

$connectM365= Read-Host "Connect to Exchange Online? (Y/N)"
If ($connectM365 -eq "Y"){
$LiveCred = Get-Credential
Connect-ExchangeOnline –Credential $LiveCred
}

В конце профиля можно добавить строку Clear-Host для очистки консоли. Сохраните файл профиля Microsoft.PowerShell_profile.ps1 и перезапустите консоль PowerShell. При следующем запуске все настройки из профиля автоматически применяться для вашей консоли и ее вид измениться.

новые настройки автоматически применяются к консоли PowerShell

Т.к. файл профиля PowerShell представляет собой файл скрипта PS1, то следует учитывать настройки запуска скриптов PowerShell. По умолчанию запуск PS1 скриптов (в том числе профилей) запрещен политикой Restricted . Чтобы разрешить применение профиля PowerShell нужно изменить Execution Policy на Remotesigned . Воспользуйтесь GPO или командой:

Set-ExecutionPolicy Remotesigned

Если вы хотите, чтобы ваш профиль PowerShell применялся и к удаленным сессиям, используйте команду:

Invoke-Command -Session $s -FilePath $PROFILE

Если при запуске сессии PowerShell вам нужно игнорировать настройки профиля используйте параметр –NoProfile при запуске PowerShell.exe или pwsh.exe .
EnglishRussianUkrainian