Windows PowerShell: изменение командной строки

85

Как изменить командную строку с помощью Windows PowerShell?

Например, в приглашении по умолчанию говорится

PS C:\Documents and Settings\govendes\My Documents>

Я хочу настроить эту строку.

сашанг
источник

Ответы:

107

Просто поместите функцию promptв свой профиль PowerShell ( notepad $PROFILE), например:

function prompt {"PS: $(get-date)>"}

или цветные:

function prompt
{
    Write-Host ("PS " + $(get-date) +">") -nonewline -foregroundcolor White
    return " "
}
Окасо Проталь
источник
2
notepad $PROFILEне работает в Windows 7 из
командной
18
Ах, я вижу, что сначала вам нужно создать профиль:new-item -itemtype file -path $profile -force
jcollum
4
Примечание. Вы можете просто вставить функцию приглашения в PowerShell, чтобы изменить путь приглашения, вместо сохранения функции в своем профиле, но вам придется делать это каждый раз при запуске powershell.
Ларри Бэттл,
3
Вам также нужно запустить Powershell от имени администратора и сделать Set-ExecutionPolicy RemoteSigned.
ответила 06
1
@qed, Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestrictedесли вы хотите изменить только для текущего пользователя или не можете работать от имени администратора.
cz
21

В связи с комментарием к ответу Ocaso Protal для Windows Server 2012, а также Windows 7 (в окне PowerShell) необходимо следующее:

new-item -itemtype file -path $profile -force
notepad $PROFILE

Я бы предложил следующее в качестве подсказки, если вы работаете с несколькими именами пользователей (например, вы + производственный логин):

function Global:prompt {"PS [$Env:username]$PWD`n>"} 

(Благодарим Дэвида И. Макинтоша за это.)

Уоррен Стивенс
источник
1
Вам также нужно запустить Powershell от имени администратора и сделать Set-ExecutionPolicy RemoteSigned.
ответила 06
11

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

С CMD у меня получилось

PROMPT=$E[33m$D$T$H$H$H$S$E[37m$M$_$E[1m$P$G

Для PowerShell я получил тот же результат:

function prompt {
    $dateTime = get-date -Format "dd.MM.yyyy HH:mm:ss"
    $currentDirectory = $(Get-Location)
    $UncRoot = $currentDirectory.Drive.DisplayRoot

    write-host "$dateTime" -NoNewline -ForegroundColor White
    write-host " $UncRoot" -ForegroundColor Gray
    # Convert-Path needed for pure UNC-locations
    write-host "PS $(Convert-Path $currentDirectory)>" -NoNewline -ForegroundColor Yellow
    return " "
}

Что немного читабельнее :-)

Кстати:

  • Я предпочитаю powershell_ise.exe $PROFILE(тупой) Блокнот .
  • Если вам нравится отлаживать подсказку () с помощью точек останова, вам следует переименовать функцию подсказки во что-нибудь еще (или попробовать ее в другом файле). В противном случае вы можете попасть в цикл: когда вы останавливаете отладку, prompt () вызывается снова, и вы снова останавливаетесь на точке останова. Поначалу довольно раздражает ...
Кодер мелочей
источник
Именно то, что я искал!
Glen Little
8

Если вы хотите сделать это самостоятельно, тогда вам подойдет ответ Ocaso Protal . Но если вы ленивы, как я, и просто хотите, чтобы что-то сделало для вас, то я очень рекомендую пакет Pshazz Люка Сэмпсона .

Чтобы показать вам, насколько вы можете быть ленивым, я предоставлю краткое руководство.

  • Установите Pshazz с помощью Scoop ( scoop install pshazz)
  • Используйте красивую предопределенную тему ( pshazz use msys)
  • Пейте (корневое) пиво

Pshazz также позволяет вам создавать свои собственные темы, что так же просто, как настроить файл JSON. Посмотрите мой, чтобы убедиться, насколько это просто!

Fomentia
источник
7

Чтобы просто показать букву диска, я использую:

            function prompt {(get-location).drive.name+"\...>"}

Затем, чтобы вернуться к пути, который я использую:

            function prompt {"$pwd>"}
Крис Хоран
источник
5

Эта версия ответа Уоррена Стивенса избегает шумного «Microsoft.PowerShell.Core \ FileSystem» в пути Set-Locationк сетевым ресурсам.

function prompt {"PS [$Env:username@$Env:computername]$($PWD.ProviderPath)`n> "} 
нудл
источник