Профиль PowerShell это по сути обычный PowerShell скрипт (PS1), который запускается вместе с PowerShell и чаще всего используется как логон-скрипт для настройки среды. В PowerShell профиль вы можете добавить собственные функции, команды, псевдонимы, импортировать необходимые PowerShell модули, задать переменные окружения, изменить внешний вид и настройки консоли PowerShell. Все элементы в профиле автоматически будут доступны в каждой новой PowerShell сессии.
В 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 профиля, если он не существует, используйте такой скрипт:
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 для управления тенатом 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. При следующем запуске все настройки из профиля автоматически применяться для вашей консоли и ее вид измениться.
Set-ExecutionPolicy Remotesigned
Если вы хотите, чтобы ваш профиль PowerShell применялся и к удаленным сессиям, используйте команду:
Invoke-Command -Session $s -FilePath $PROFILE
–NoProfile
при запуске PowerShell.exe
или pwsh.exe
.