Мой $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 коммент. на “Мой $Prompt”

  1. abigor пишет:

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

  2. Xaegr пишет:

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

  3. Alexandr Romanov пишет:

    А я у себя заряд батарей еще вывожу :)
    вот этим кодом:
    $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 пишет:

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

  5. T пишет:

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

  6. LeniVetc пишет:

    Спасибо :)

  7. Xaegr пишет:

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

  8. SergS пишет:

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

  9. exray пишет:

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

  10. Xaegr пишет:

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

  11. exray пишет:

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

  12. SergS пишет:

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

  13. Xaegr пишет:

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

  14. SergS пишет:

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

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

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


Комментарии закрыты.