Мой $Prompt

Хотите такую же строчку приглашения себе? 🙂

prompt1

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

Нижеследующий код можно добавить себе в файл $profile и тогда он будет активироваться автоматически при каждом запуске PowerShell.

$IsElevated=$false            
foreach ($sid in [Security.Principal.WindowsIdentity]::GetCurrent().Groups) {            
    if ($sid.Translate([Security.Principal.SecurityIdentifier]).IsWellKnown([Security.Principal.WellKnownSidType]::BuiltinAdministratorsSid)) {            
        $IsElevated=$true            
    }            
}            
            
function prompt 
{            
 [Environment]::CurrentDirectory=(Get-Location -PSProvider FileSystem).ProviderPath            
 $path = (Get-Location).path -replace '^(.*?[^:]:\\).+(\\.+?)$',('$1'+[char]8230+'$2') -replace '^.+?::' -replace '^(\\\\.+?\\).+(\\.+?)$',('$1'+[char]8230+'$2')            
 $id = ([int](Get-History -Count 1).Id) + 1            
 $prefix = "[PS <$id> "            
 if ($NestedPromptLevel){$prefix += "($NestedPromptLevel) "}            
 if ($isElevated) {$Color = "Red"} else {$Color = "White"}            
 write-host $prefix -ForegroundColor $Color -NonewLine            
 write-host ($path) -foregroundcolor "Gray" -NonewLine            
 write-host "]" -ForegroundColor $Color -NonewLine            
 " "            
}            

Пользуйтесь на здоровье 🙂

Опубликовано в Learn, PowerShell, Scripting, Tips. Метки: , , , . 15 комментариев »

комментариев 15 to “Мой $Prompt”

  1. abigor Says:

    Это чего, после моего вопроса про кол-во команд?

  2. Xaegr Says:

    Именно 🙂 Впрочем я давно хотел свой prompt выложить, а тут повод 🙂

  3. Alexandr Romanov Says:

    А я у себя заряд батарей еще вывожу 🙂
    вот этим кодом:
    $charge = Get-WMIObject Win32_Battery -property EstimatedChargeRemaining
    switch ($charge.EstimatedChargeRemaining) {
    { $_ -lt 25 } { $color = ‘red’; break }
    { $_ -lt 50 } { $color = ‘red’; break }
    default { $color = ‘white’ }
    }

  4. Xaegr Says:

    Александр, здорово! 🙂 Только наверное в одном из случаев должен быть не red, а dark red? 😉

  5. T Says:

    А зачем проставляется
    [Environment]::CurrentDirectory ?

  6. LeniVetc Says:

    Спасибо 🙂

  7. Xaegr Says:

    2 T: Потому что по умолчанию, текущий каталог для приложения (PowerShell.exe), не соответствует той папке в которую вы перешли с помощью cd (set-location) в PowerShell. Это связано с тем, что система не позволяет использовать в качестве путей для приложений например hklm:\… 😉 Но по возможности (когда мы находимся в файловой системе), бывает полезно их синхронизировать, так как многие внешние утилиты, когда вы их вызываете из PowerShell, используют в качестве текущего пути именно каталог программы. Надеюсь понятно объяснил 🙂

  8. SergS Says:

    А у меня почему-то вместо многоточия … проставляется двоеточие : 😦

  9. exray Says:

    2 SegrS: я в первом replace поменял (‘$1’+[char]8230+’$2’) на (‘$1…$2’), но чую есть вариант лучше 🙂

  10. Xaegr Says:

    SergS, extray: Я подозреваю что у вас проблемы из за того что вы используете не TrueType шрифт в консоли, и соответственно у него проблемы с unicode символами. Попробуйте сменить на Lucida Console или Consolas.

  11. exray Says:

    2 Xaegr: да, не успел отписаться раньше, уже нашел. именно это и было, спасибо. 🙂

  12. SergS Says:

    2 Xaegr: Простите, а где это настраивается. У меня Vista

  13. Xaegr Says:

    SergS: Правой кнопкой по заголовку командной строки, затем Свойства (для текущего окна) или Умолчания (дле всех новых окон), и там закладка Шрифт.

  14. SergS Says:

    2 Xaegr: Спасибо, все получилось 🙂

  15. Делимся своими профилями! « PowerShell и другие скрипты Says:

    […] про приглашение я писал тут. Комментариев […]


Обсуждение закрыто.