Профиль PowerShell это по сути обычный PowerShell скрипт (PS1), который запускается вместе с PowerShell и чаще всего используется как логон-скрипт для настройки среды. В PowerShell профиль вы можете добавить собственные функции, команды, псевдонимы, импортировать необходимые PowerShell модули, задать переменные окружения, изменить внешний вид и настройки консоли PowerShell. Все элементы в профиле автоматически будут доступны в каждой новой PowerShell сессии.
В Windows PowerShell есть несколько путей для хранения профилей. В следующей таблице все пути перечислены в порядке приоритета (сначала идет профиль с наивысшим приоритетом):
Путь | Описание |
$PSHOME\Profile.ps1
| Все пользователи, все приложения (AllUsersAllHosts) |
$PSHOME\Microsoft.PowerShell_profile.ps1
|
Все пользователи, текущее приложение (AllUsersCurrentHost) |
$Home\Documents\PowerShell\Profile.ps1
| Текущий пользователь, все приложения (CurrentUserAllHosts) |
$Home\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
| Текущий пользователь, текущее приложения (CurrentUserCurrentHost) |
Если вы хотите выполнить настройку сессии PowerShell для всех пользователей компьютера, нужно использовать файл
$PROFILE.AllUsersAllHosts
. Для настройки PowerShell профиля только для текущего пользователя, сохраняйте настройки в
$PROFILE.CurrentUserCurrentHost
.
Чтобы найти свой PowerShell профиль, достаточно выполнить команду
$Profile
. По умолчанию путь к PowerShell профилю пользователя выглядит так: C:\Users\username\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
- В Windows PowerShell переменная окружения
$Home
ссылается на каталог профиля текущего пользователя (C:\Users\username).$PsHome
– указывает на каталог установки PowerShell (C:\Windows\System32\WindowsPowerShell\v1.0). - В новых версиях PowerShell Core 7.x переменная
$PSHome
ссылается на C:\Program Files\PowerShell\7. - В PowerShell Core на Linux профиль хранится в файле /opt/microsoft/powershell/profile.ps1 или /usr/local/microsoft/powershell/7/profile.ps1.
У PowerShell ISE есть собственные файлы профилей:
$PsHome\Microsoft.PowerShellISE_profile.ps1
| Все пользователи |
$Home\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
| Текущий пользователь |
Свои файлы профилей есть и у Visual Studio Code (при использовании в качестве редактора для PowerShell скриптов):
$PSHOME\Microsoft.VSCode_profile.ps1
| Все пользователи |
$Home\Documents\PowerShell\Microsoft.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 “\\FS01\Tools”
Если вы часто используете 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
.