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

Использование файлов профилей 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
.

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