Заметки о Windows и других программных продуктах Microsoft...

Профили в PowerShell

Профили в PowerShell

Что такое профиль в PowerShell ? По сути это обычный скрипт .ps1, выполняющийся при запуске оболочки PowerShell. Профиль можно использовать для настройки окружения — добавлять алиасы, задавать функции и переменные, импортировать модули, изменять внешний вид консоли  и многое другое. Новые элементы, добавленные в профиль, будут доступны в каждом сеансе без необходимости импортировать или создавать их заново.

Всего в PowerShell поддерживаются четыре основных профиля:

  • Текущий пользователь, текущее приложение — $Home\Documents\WindowsPowerShell\profile.ps1;
  • Текущий пользователь, все приложения — $Home\Documents\profile.ps1;
  • Все пользователи, текущее приложение — $PsHome\MicrosoftPowerShell_profile.ps1;
  • Все пользователи, все приложения — $PsHome\profile.ps1.

В переменной $Home хранится путь к домашнему каталогу текущего пользователя (для Win 7 это C:\Users\user_name), а в $PsHome — к каталогу установки PowerShell (C:\Windows\System32\WindowsPowerShell\v1.0).

Текущее приложение — это приложение Microsoft.PowerShell, которое и предоставляет нам интерфейс командной строки. Плюс к этому другие приложения PowerShell тоже могут поддерживать собственные профили. Например PowerShell ISE использует профили:

  • $Home\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1 — для текущего пользователя;
  • $PsHome\Microsoft.PowerShellISE_profile.ps1 — для всех пользователей.

При наличии нескольких профилей предпочтение отдается более узконаправленному. Узнать, какой профиль используется на данный момент можно, введя команду $profile. Будет выведен полный путь к профилю, который интерпретатор команд пытается использовать в качестве основного. Также в свойствах переменной $Profile хранятся пути ко всем доступным профилям, узнать их можно командой:

$Profile | Get-Member -MemberType NoteProperty

пути к профилям в PowerShell

 

Говоря о доступных профилях стоит учесть один момент, а именно — по умолчанию профили не созданы. Они существуют только если вы создали их. Узнать, был ли создан пользовательский профиль PowerShell можно командой:

Test-Path $profile

Если профиль существует, эта команда вернет True, в противном случае — False.

Для создания профиля можно использовать командлет New-Item. Например, создать профиль текущего пользователя в текущем приложении можно командой:

New-Item -ItemType file -Path $profile -force

создание профиля в PowerShell

 

Профиль создается пустым и его надо наполнить.  Откроем его в блокноте командой notepad $profile и посмотрим, как можно изменить некоторые настройки PowerShell:

# Изменение внешнего вида консоли
 (Get-Host).UI.RawUI.ForegroundColor = ″green″
 (Get-Host).UI.RawUI.BackgroundColor = ″black″
 (Get-Host).UI.RawUI.CursorSize = 10
 (Get-Host).UI.RawUI.WindowTitle = ″My Window″

# Установка директорию по умолчанию
 Set-Location C:\

# Новый алиас для Get-Help
 Set-Alias HelpMе Get-Help 

# Добавление всех зарегистрированных оснасток и модулей
 Get-Pssnapin -Registered | Add-Pssnapin -Passthru -ErrorAction SilentlyContinue
 Get-Module -ListAvailable| Import-Module -PassThru -ErrorAction SilentlyContinue

# Очиcтка экрана
 Clear-Host

# Приветствие себя любимого
 Write-Host ″Hello, my friend !!!″

Записываем все это в профиль, перезапускаем консоль и смотрим, что получилось. И тут надо помнить об еще одном важном моменте — политике выполнения скриптов. Как я уже говорил, профиль представляет из себя обычный скрипт, а значение политики по умолчанию — Restricted, что запрещает выполнение любых скриптов в PowerShell. Поэтому для того, чтобы профиль применился нужно изменить текущее значение политики :

Set-ExecutionPolicy Remotesigned

изменение политики выполнения скриптов в PowerShell

 

После изменения политики еще раз перезапускаем консоль, профиль применяется и вот результат.

результаты применения профиля в PowerShell

 

Грамотно созданный профиль может облегчить работу с PowerShell, однако стоит соблюдать меру. Большой профиль, загружающий множество оснасток, может привести к снижению скорости запуска приложений. Кстати, может возникнуть ситуация, когда необходимо запустить оснастку PowerShell без использования профилей. Для этого используется параметр -NoProfile программы PowerShell.exe. Сделать это можно, введя в окне Run команду:

PowerShell  -noprofile

И несколько слов об удаленных сеансах. При удаленном подключении профили не запускаются автоматически, и переменная $Profile в удаленных сеансах не определена. Однако в каждом удаленном сеансе используется конфигурация сеанса, которую можно использовать для создания специальной среды для удаленных пользователей.

В качестве примера зарегистрируем на локальном компьютере конфигурацию сеанса WithProfile, где с помощью параметра -StartupScript укажем PowerShell применять заданный скрипт в любом сеансе, для которого используется эта конфигурация:

Register-PsSessionConfiguration -Name WithProfile -StartupScript $profile

Теперь если при подключении к этому компьютеру указать имя конфигурации WithProfile, то к сеансу применится текущий профиль:

New-PsSession -ComputerName SRV1 -ConfigurationName WithProfile

 

Ну вот вроде и все, что я хотел рассказать о пользовательских профилях в PowerShell.

 
 
Комментарии

Пока нет комментариев.