Всегда, когда я рассказываю о сценариях профиля Windows PowerShell, находятся слушатели, спрашивающие, что содержится в моем сценарии профиля. Вообще говоря, я думаю, что им хочется понять, как можно использовать свой профиль.
Профили удобны, но поначалу они могут показаться загадочными, потому что большинство происходит скрыто и во время запуска Windows PowerShell. На самом деле никакой загадки в них нет.
Для начала надо понять, что Windows PowerShell это всего лишь большая DLL-библиотека, расположенная на вашем компьютере. Ее я называю ядром Windows PowerShell. Оно никак не связано с профилями. В большинстве случаев вы даже не сможете напрямую взаимодействовать с ядром, если вы не умеете программировать на .NET.
Простые смертные взаимодействуют с Windows PowerShell посредством приложения внешнего размещения, которое часто называют хостом. PowerShell.exe, наиболее часто используемая стандартная консоль с синим фоном, является одним из таких хостов. Еще один пример ISE (Windows PowerShell Integrated Scripting Environment). Редакторы Windows PowerShell сторонних производителей, такие как PrimalScript, PowerShell Plus, PowerSE, PowerGUI и другие, также являются хостами. Хост отвечает за загрузку (или отсутствие загрузки, если это нужно) сценариев профиля. Перечень загружаемых сценариев определяется самим хостом.
Например, PowerShell.exe и Windows PowerShell ISE загружают до четырех сценариев. Два находятся в пользовательском профиле в папке \Documents\WindowsPowerShell. У разных пользователей они могут отличаться. Предполагается, что один из них, profile.ps1, загружается всеми хостами Windows PowerShell.
Другой зависит от приложения-хоста, например Microsoft.PowerShell_profile.ps1, который загружается хостом PowerShell.exe. Областью действия остальных двух сценариев является машина, причем один индивидуален для разных хостов, в второй предназначен для всех хостов.
Чтоб подробнее узнать об этих файлах, выполните в оболочке команду Help about_profiles. В хостах сторонних производителей, например в редакторах сценариев, нужно смотреть документацию. Для предоставления поведения, похожего на оболочку Microsoft, некоторые из них могут загружать те же сценарии, что и PowerShell.exe. Другие используют собственные сценарии, а третьи позволяют вам задавать, какие сценарии загружать при запуске.
Короче говоря, хосты при запуске будут загружать эти сценарии, если они существуют. По умолчанию ни один из используемых хостами Microsoft сценариев не существует. В сущности, папка Documents\WindowsPowerShell тоже по умолчанию не создается — если нужно, вам придется создавать ее специально. Кроме того, придется включить политику выполнения сценариев, изменив ее значение на отличное от Restricted (которое задано по умолчанию).
Мой профиль
Так что насчет моего профиля? Мне стыдно это признавать, но он практически всегда пустой. Причина в том, что мне приходится делать очень много вещей в Windows PowerShell — создавать учебные видеоролики, демонстрировать на уроках, писать статьи и т. п. Это приводит к тому, что мне нужна абсолютно чистая среда в конфигурации по умолчанию. Я не хочу, чтобы что-то загружалось заранее, потому что мне очень часто приходится демонстрировать загрузку того или иного сценария вручную.
Но если бы я работал в обычной производственной среде, то что бы я разместил в этих сценариях? Я начал бы с модулей, с которыми приходится работать ежедневно. Например, я бы добавил Import-Module ActiveDirectory. Мне приходится очень много работать с Active Directory, поэтому предварительная загрузка модуля будет нелишней.
Я не стал бы размещать в профиле никаких пользовательских функций — лучше разместить их в отдельном модуле сценария и только после этого импортировать в профиль. Так профиль остается прозрачнее и из него проще удалить модуль (вместе с его функциями), если функции конфликтуют с другими нужными мне вещами.
Я не стал бы менять заголовок окна Windows PowerShell, приглашение Windows PowerShell и все остальное в этом роде. В этом нет ничего плохого, но я отношусь к тем людям, которым нравится, чтобы все было так, как задумано авторами. Я не стал бы трогать эти вещи. Я знаю, что многие любят поиграться со строкой приглашения, и это надо делать именно в профиле.
Я бы внес одно изменение:
$host.privatedata.ErrorForegroundColor = 'green'
При этом красный шрифт сообщений об ошибках становится зеленым. Я объясняю это тем, что у цветовой гаммы «красный текст на черном фоне» слишком низкий контраст, чтобы быть удобным для чтения. Но реальная причина заключается в том, что экран с массой красного текста напоминает мне школьные уроки языка, которые меня сильно расстраивали. Зеленые сообщения об ошибках мне кажутся более мирными и я меньше нервничаю. Я знаю, что это странно, но вся вина за это лежит на моих учителях — миссис Джованни и миссис Хансен.
Я не задаю никаких пользовательских псевдонимов, потому что боюсь использовать их. Если я передам свой сценарий кому-то, у кого нет этих определений, сценарий просто не будет работать.
Я не создаю витиеватые заставки с помощью Write-Host и не отображаю список доступных функций и модулей. Я знаю, как сравнительно легко при необходимости получить список таких вещей, и я не люблю, чтобы при первом запуске экран был захламлен. (Я часто выполняют команду cls, чтобы сохранить ощущение новизны и чистоты.) Я выполняю команду cd c:\, чтобы начинать работу с диска C:, а не своего пользовательского профиля.
Вот, собственно, и все насчет моего профиля. А как насчет вашего?