Как я могу запустить powershell.exe с цветами по умолчанию из ярлыка PowerShell?

Я привязываюсь к красивому синему цвету окна PowerShell, когда вы запускаете его с помощью одного из предустановленных ярлыков. Однако, если вы вручную запустите powershell.exe, вы не получите эти цвета, вы получите черный / белый :(

Это связано с тем, что в файле ярлыка (.lnk) установлены настройки по умолчанию:

Настройки цвета ярлыка PowerShell

У меня есть запись «PowerShell Prompt Here» в контекстном меню проводника, и я бы хотел, чтобы она запускала PowerShell, используя те же красивые цвета, что и обычный ярлык; черный отстой, и сбивает с толку окна разного цвета (особенно когда у меня часто открываются старые командные окна, которые тоже черные!).

Я обнаружил две проблемы, пытаясь установить это до сих пор:

  1. Кажется, что установка цвета из PowerShell допускает только определенные значения (перечисление ConsoleColor), ни одно из которых не соответствует значению в ярлыке по умолчанию.
  2. Установка цвета в профиле PS приводит к тому, что только текст, написанный после этого, будет соответствовать новому цвету фона. Добавление "cls" вызывает неприятную вспышку исходного цвета при запуске.

Есть ли способ запустить PowerShell из командной строки (т.е. что я могу встроить в реестр как пункт контекстного меню проводника), который будет использовать те же настройки, что и ярлык?


person Danny Tuppeny    schedule 03.12.2012    source источник


Ответы (9)


Вот действительно простой способ:

1. Добавьте .LNK к переменной PATHEXT.

Пуск -> запустить «sysdm.cpl» -> дополнительно -> Переменные среды

Прокрутите вниз по системным переменным, дважды щелкните ПУТЬ

Добавить .LNK; как показано ниже:

Расширение пути

2 Скопируйте файл по умолчанию "Windows Powershell.lnk".

Copy-Item "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Windows PowerShell\Windows PowerShell.lnk" "C:\Windows\System32\powershell.lnk"

3. При вводе «powershell» из командной строки теперь отображается цвет / конфигурация консоли по умолчанию.

Вы можете дополнительно настроить .lnk в C: \ Windows \ System32 по своему вкусу.

Обратите внимание, что это будет работать только потому, что вы добавили .lnk в список допустимых расширений, И c: \ windows \ system32 по умолчанию является первым элементом в пути поиска (системная переменная PATH).

При этом консоль не настраивается, если она запускается через cmd.exe.

4. Чтобы это сработало из контекстного меню «Запустить Powershell здесь», сохраните его как файл .reg и импортируйте его:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\PowerShellHere\command]
@="C:\\WINDOWS\\system32\\cmd.exe /c start powershell -NoExit \"cd '%1';(get-host).ui.rawui.windowtitle = 'Oompa Loompa'\""

[HKEY_CLASSES_ROOT\Directory\shell\PowerShellHere\command]
@="C:\\WINDOWS\\system32\\cmd.exe /c start powershell -NoExit \"cd '%1';(get-host).ui.rawui.windowtitle = 'Oompa Loompa'\""

Я использую cmd.exe для вызова «start», который запускает powershell.lnk и передает текущий рабочий каталог в качестве аргумента. Похоже, что из адресной строки пока не работает. Я должен был пойти домой 45 минут назад, но решить вашу проблему было весело! :)

Бонусные баллы: вы можете выполнять команды, отправленные в Powershell. Итак, если вы хотите изменить атрибут заголовка консоли Powershell:

\"cd '%1';(get-host).ui.rawui.windowtitle = 'Oompa Loompa'"

Просто добавьте точку с запятой между командами.

Счастливый обстрел

person Rex Hardin    schedule 03.12.2012
comment
Интересная идея; хотя я не уверен, будет ли это работать из пункта контекстного меню; многие вещи просто дают глупые ошибки, такие как попытка разрешить / понять команду. Хотя даст шанс! - person Danny Tuppeny; 04.12.2012
comment
Я добавил запись в реестр, которую вы можете использовать, и предполагал, что вы используете PowerShellHere.inf, который витает вокруг. Я опубликую ссылку на обновленную установку контекстного меню PowerShellHere, когда у меня будет такая возможность. - person Rex Hardin; 04.12.2012
comment
При запуске из контекстного меню он по-прежнему выглядит черным :( Однако выполнение команды в диалоговом окне «Выполнить» работает нормально. У вас это работает?: / - person Danny Tuppeny; 04.12.2012
comment
Сотрите это; должно быть, переменные env не вступили в силу; перезагрузился и все работает нормально! На короткое время появляется черное окно cmd; Интересно, можно ли это скрыть? - person Danny Tuppeny; 04.12.2012
comment
Бонусные баллы, если вы можете сделать так, чтобы в заголовке не говорилось "powershell" в нижнем регистре :-D - person Danny Tuppeny; 04.12.2012
comment
Я обновил запись в реестре и описал процесс добавления команд. Кроме того, вы потенциально можете заменить cmd.exe на hstart.exe, если сообщение действительно это надоедливо. Вы сказали бонусные баллы? ;) - person Rex Hardin; 04.12.2012
comment
Я загрузил hstart, но не смог заставить его работать за 5 минут, которые я потратил; графический интерфейс требовал для вызова реального файла (а не команды), а опция скрытия, казалось, запускала скрытый файл powershell.exe, а также скрывала командную строку! Пользуюсь им весь день, и вспышка не так раздражает, как я ожидал :) - person Danny Tuppeny; 04.12.2012
comment
Не уверен, почему в вашем ответе есть вторая запись reg; хотя добавление к фоновому ключу тоже хорошо (хотя вам понадобится% v вместо% 1), поэтому вы можете щелкнуть правой кнопкой мыши в пустом месте в папке, если вы уже в нем; это то, что я делаю в 99% случаев :-) - person Danny Tuppeny; 04.12.2012
comment
Я не могу присуждать бонусные баллы (ха! Не могу поверить, что вы попались на это ;-)), поэтому я также проголосовал за один из ваших других правильных ответов =) - person Danny Tuppeny; 04.12.2012
comment
Интересно, что я просто пришел сделать это на новом компьютере, и простое создание раздела реестра для использования «Пуск» сработало; Мне не пришлось ничего делать с lnk / pathext! :) cmd.exe /c start powershell -NoExit -Command "cd '%v'" - person Danny Tuppeny; 01.02.2014
comment
RE: Шаг 2, в Windows Server 2012 R2 я обнаружил Windows Powershell.lnk в C:\ProgramData\Microsoft\Windows\Start Menu\Programs\System Tools - person Jesse Schoff; 11.02.2014
comment
Regedit должен быть больше похож на: cmd.exe /c start powershell -NoExit -NoProfile -Command Set-Location -LiteralPath "%V" или cmd.exe /c start powershell -NoExit -NoProfile -Command Set-Location -LiteralPath "%L" - person Donatello; 13.12.2018

Отредактируйте сценарий своего профиля (на который указывает $ profile) и сами установите желаемые цвета:

# set regular console colors
[console]::backgroundcolor = "darkmagenta"
[console]::foregroundcolor = "darkyellow"

# set special colors

$p = $host.privatedata

$p.ErrorForegroundColor    = "Red"
$p.ErrorBackgroundColor    = "Black"
$p.WarningForegroundColor  = "Yellow"
$p.WarningBackgroundColor  = "Black"
$p.DebugForegroundColor    = "Yellow"
$p.DebugBackgroundColor    = "Black"
$p.VerboseForegroundColor  = "Yellow"
$p.VerboseBackgroundColor  = "Black"
$p.ProgressForegroundColor = "Yellow"
$p.ProgressBackgroundColor = "DarkCyan"

# clear screen
clear-host
person x0n    schedule 04.12.2012
comment
Я добавляю этот ответ для справки других, несмотря на ваш вариант 2), что вам это не нравится. - person x0n; 04.12.2012
comment
Я не знал, что это так легко сделать. Теперь, когда я это делаю, я не могу без этого жить. Цвета ... В окне консоли! Удивительный! Мой приятель по Linux умрет от разочарования (консоль - его самый сильный аргумент, поскольку он все еще упорно работает с CMD.EXE, постоянно жалуясь на отстойное приглашение Windows). Я очень люблю тебя прямо сейчас. - person Konrad Viltersten; 19.12.2016
comment
Это также может перейти в контроль версий, и вы можете поделиться этими настройками на каждом используемом вами компьютере. - person Phil; 20.03.2018
comment
Есть идеи, как указать точные значения цвета? Я пробовал [console]::backgroundcolor = "#FF0000", [console]::backgroundcolor = 0xFF0000 (RGB) и [console]::backgroundcolor = 0xFFFF0000 (ARGB) - person Drew Chapin; 13.03.2019

Мне было очень полезно использовать инструмент concfg и scoop, чтобы установить цвета и шрифты для Powershell:

  1. Установите совок:

    iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
    
  2. Установите concfg:

    scoop install concfg
    
  3. Установите Соляризованную тему:

    concfg import solarized
    

Все, спасибо авторам!

person Artyom    schedule 02.01.2017

Щелкните системное меню (значок PowerShell в верхнем левом углу окна) и щелкните Параметры по умолчанию. Здесь вы можете изменить цвета по умолчанию, и это будет соблюдаться командой PowerShell Prompt Here.

От: https://superuser.com/a/523017/109736

person Marc Stober    schedule 23.07.2013
comment
Разве это не изменит их все на черно-белые, когда я специально хотел скопировать красивый синий? - person Danny Tuppeny; 24.07.2013
comment
Нажатие «По умолчанию» фактически вызывает окно свойств, в котором вы можете изменить цвет по умолчанию на любой цвет RGB, и это помогло мне изменить цвет по умолчанию для всех окон PowerShell, включая окна PowerShell Prompt Here. - person Marc Stober; 24.07.2013

Правильный способ сделать это - с помощью реестра.

cd hkcu:/console
$0 = '%systemroot%_system32_windowspowershell_v1.0_powershell.exe'
ni $0 -f
sp $0 ColorTable00 0x00562401
sp $0 ColorTable07 0x00f0edee
person Steven Penny    schedule 18.05.2014
comment
Отлично сделано. Вот еще одна идиоматическая переформулировка PowerShell, которая не меняет текущего местоположения: New-Item HKCU:\Console\%systemroot%_System32_WindowsPowerShell_v1.0_powershell.exe | Set-ItemProperty -Name ColorTable00 -Value 0x00562401 -PassThru | Set-ItemProperty -Name ColorTable07 -Value 0x00f0edee. На всякий случай я пропустил -Force (-f) из вызова New-Item (ni), потому что, к сожалению, это отбрасывает все ранее существовавшие значения целевого ключа. - person mklement0; 14.12.2018

  1. Запустите команду regedit, чтобы открыть редактор реестра.
  2. Отследите HKEY_CURRENT_USER > CONSOLE и сделайте резервную копию всей папки, экспортируя на всякий случай
  3. Удалить папку

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

Примечание: если у вас есть какие-либо другие настройки, связанные с PowerShell (или командной строкой, Git Bash и т. Д.), Которые вы, возможно, захотите сохранить, пожалуйста, изучите папку консоли, чтобы удалить соответствующие ключи.

person rak    schedule 05.12.2017
comment
Вопрос не в том, чтобы сбрасывать цвета Powershell по умолчанию, а в том, чтобы использовать цвета из ярлыка при запуске из командной строки. - person Scott; 02.05.2020

Это было мое решение (установка цветов в скрипте, который запускается как системный). Может быть, больше, чем нужно (см. Мой ответ):

https://superuser.com/questions/891519/using-psexec-to-launch-powershell-session-as-system-with-specific-window-attribu

person montag    schedule 17.04.2015

Основываясь на отличном ответе @ rex-hardin, я улучшил содержимое regedit здесь, добавив значок и используя собственные аргументы PowerShell. чтобы начать на правильном пути.

Контекстное меню активируется при щелчке правой кнопкой мыши на фоне каталога и при щелчке правой кнопкой мыши непосредственно на значке каталога.

Конечно, мы также запускаем консоль с синим фоном, точно такую ​​же, как и консоль по умолчанию.

1. Добавьте расширение ".LNK" к %PATHEXT% переменной среды.

Это позволяет системе запускать файлы с расширением .lnk (скрытое расширение для ярлыков)

2. Скопируйте ярлык PowerShell по умолчанию в system32 как файл powershell.

Это позволяет команде powershell запускать наш ярлык из папки system32 (которая находится в %PATH%)

Используйте проводник (копировать + переименовать) или командную строку ниже:

Copy-Item "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Windows PowerShell\Windows PowerShell.lnk" "C:\Windows\System32\powershell.lnk"

3. Добавьте приведенный ниже код в файл powershell_here.reg и выполните его.

powershell_here.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\directory\background\shell\PowerShell]
@="PowerShell Here"
"Icon"="%SystemRoot%\\system32\\WindowsPowerShell\\v1.0\\powershell.exe"

[HKEY_CLASSES_ROOT\directory\background\shell\PowerShell\command]
@="cmd.exe /c start powershell -NoExit -NoProfile -Command Set-Location -LiteralPath '%V'"

[HKEY_CLASSES_ROOT\directory\shell\PowerShell]
@="PowerShell here"
"Icon"="%SystemRoot%\\system32\\WindowsPowerShell\\v1.0\\powershell.exe"

[HKEY_CLASSES_ROOT\directory\shell\PowerShell\command]
@="cmd.exe /c start powershell -NoExit -NoProfile -Command Set-Location -LiteralPath '%L'"

введите здесь описание изображения

person Donatello    schedule 13.12.2018

Запустите powershell с синим и белым цветами по умолчанию в текущей папке из Explore, Total Commander или Double Commander в 64-разрядной версии Windows 7 Pro:

  1. Звездное меню -> поиск по ссылке PowerShell -> щелкните по ней правой кнопкой мыши -> Свойства -> вкладка Ярлык (та, которая открывается по умолчанию) -> изменить начало в: ->% CD%

введите здесь описание изображения

  1. Создайте командный файл с именем ps.bat где-нибудь в папке, которая находится в системном PATH (если у вас нет такой папки, просто создайте ее, скажем, C: \ run \ cli < / em> и добавьте его в системную переменную окружения PATH). Этот командный файл должен содержать следующую команду:

    start "" "C: \ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ Accessories \ Windows PowerShell \ Windows PowerShell.lnk"

Вот и все. Теперь просто введите ps в строке пути проводника, где отображается текущая папка, или в поле командной строки Total Commander или Double Commander и т. Д.

В Windows 10 нет необходимости изменять ярлык PowerShell из меню «Пуск», а указанный выше файл ps.bat может содержать только следующую команду:

start %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
person Lotzy    schedule 16.06.2020