Pull to refresh

Меняем цвета в PowerShell

PowerShell *
Sandbox
Совершено недавно открыл для себя эту оболочку. Тут же полез искать книги, которые, кстати, уже перевели и их можно взять отсюда. И все вроде бы хорошо, и код пишется легко и интеграция с vsb-скиптами, но, почему то, тянет меня к мастдайным окнам.

И так, было решено перекрасить окошко PowerShell в стандартный цвет cmd и параллельно настроить автозапуск собственных функций и алиасов. Так же, слегка, напрягало предложения ввода с надписью — PS, которое, совместно с цветом, напоминает лого Adobe Photoshop ( Ничего против Adobe не имею ).

Итак, информация следом исключительно для новичков.

Первым делом запускаем оболочку, видим привычное окно:
image

Во-первых, нам понадобятся права на запуск отдельных скриптов с расширением ps1.

Посмотреть их можно выполнив команду:
Get-ExecutionPolicy

По умолчанию идет политика: Restricted, которая запрещает выполнение любых скриптов.

Тут три варианта.
1. Либо изменить политику на AllSigned и подписывать скрипты ( подробнее можете прочитать выполнив команду get-help about_signing ).
2. Либо именить политику на RemoteSigned, разрещающая запускать все скрипты, за исключением скаченных из сети.
3. Или изменить политику на Unrestricted, позволяющая выполнять любые скрипты, за исключением скаченных, на на выполнение которых будет выдаваться запрос.

Я выбрал второй путь, он, все же, безопасней. Поэтому меняем политику командой:

Set-ExecutionPolicy RemoteSigned

image
Получаем запрос на изменение политики на который нужно ответить Y(да).

Во-вторых, создадим скрипт, который будет запускаться вместе с PowerShell:
New-Item -type file $PROFILE

По идее, на данном моменте может выскочить вот такая ошибка:
image
Но ничего страшного, оболочка пишет что не существует папки WindowsPowerShell в Моих Документах, создадим её и повторим команду:
image
Как мы видим, создался пустой файл с названием Microsoft.PowerShell_profile.ps1.

Половину работы мы сделали. У нас есть права на выполнение скриптов и создан скрипт, подгружающийся по умолчанию.

В-третьих, нам нужно научиться получать и изменять информацию об оболочке.
Командлет Get-Host как раз таки этим и занимается:
image
Свойство UI на самом деле является объектом, и если мы введем (Get-Host).UI, то увидим, что у этого объекта так же есть свойство RawUI, которое как раз и содержит нужные нам настройки:
(Get-Host).UI.RawUI

image
Изменять эти настройки можно так:

(Get-Host).UI.RawUI.WindowTitle = “Окно”
(Get-Host).UI.RawUI.BackgroundColor = “Black”
cls

Важно, для того чтобы измененые настройки сразу отображались на экране, нам необходимо прописать алиес cls отвечающий за очистку экрана.

Это, конечно же все круто, но настройки сбрасываются если закрыть окно, поэтому запишем их в файл, который загружается с оболочкой на старте. Редактируем файл Microsoft.PowerShell_profile.ps1 примерно так:

# We to Hell?! - Is't WorldCount!

# Изменяем настройки окна
(Get-Host).UI.RawUI.ForegroundColor="Gray";
(Get-Host).UI.RawUI.backgroundColor="Black";
(Get-Host).UI.RawUI.CursorSize=10;
(Get-Host).UI.RawUI.WindowTitle="WorldCount Console";

# Очищаем экран
cls

# Выводим приветствие
echo " ";
echo "Привет, WorldCount!";
echo " ";
echo " ";

# Устанавливаем начальный каталог
$MyRoot = "C:\Shell\";
CD $MyRoot;

# Вид предложения ввода
function prompt
{
    "[WorldCount:] " + $(get-location) + "> "
}

А теперь коротко по коду.

Первые 4-ре свойства отвечают за настройку окна, после установки свойств делаем обязательное очищение — cls.

Cd $MyRoot; — отвечает за то, в каком каталоге при загрузке оболочки мы окажемся.

Функция promt — стандартная видоизмененная функция, которая отвечает за вид строки ввода. Я убрал PS и добавил свой ник.

Сохраняем файл, перезапускаем оболочку.

Выглядит это вот так:
image
Ну и на последок, в файл Microsoft.PowerShell_profile.ps1 вы можете легко написать свои алиесы. Допустим

set-alias WeToFuck Get-Process


Всем спасибо, удачи в освоении этой прекрасной оболочки.
Tags:
Hubs:
Total votes 12: ↑8 and ↓4 +4
Views 16K
Comments Comments 5