PowerShell и другие скрипты

14.5.2009

Мой $Prompt

Рубрика: Learn, PowerShell, Scripting, Tips — Метки: , , , — Xaegr @ 12:02

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

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
 " "
}            

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

Комментарии (15) »

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

    Комментарий от abigor — 14.5.2009 @ 13:56

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

    Комментарий от Xaegr — 14.5.2009 @ 13:57

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

    Комментарий от Alexandr Romanov — 14.5.2009 @ 15:05

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

    Комментарий от Xaegr — 14.5.2009 @ 15:35

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

    Комментарий от T — 14.5.2009 @ 19:45

  6. Спасибо :)

    Комментарий от LeniVetc — 15.5.2009 @ 8:36

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

    Комментарий от Xaegr — 15.5.2009 @ 9:02

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

    Комментарий от SergS — 15.5.2009 @ 9:38

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

    Комментарий от exray — 15.5.2009 @ 9:54

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

    Комментарий от Xaegr — 15.5.2009 @ 10:04

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

    Комментарий от exray — 15.5.2009 @ 10:05

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

    Комментарий от SergS — 15.5.2009 @ 10:12

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

    Комментарий от Xaegr — 15.5.2009 @ 10:14

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

    Комментарий от SergS — 15.5.2009 @ 10:18

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

    Уведомление от Делимся своими профилями! « PowerShell и другие скрипты — 1.6.2009 @ 10:34


RSS-лента комментариев к этой записи. URI для обратной ссылки

Оставить комментарий

Блог на WordPress.com.