如何使用PowerShell快捷方式启动powershell.exe,并使用“默认”颜色?

35

我喜欢从预安装的快捷方式启动PowerShell窗口时出现的漂亮的蓝色。但是,如果您手动启动powershell.exe,则不会得到这些颜色,而是黑白色 :(

这是因为默认设置在快捷方式(.lnk)文件上:

PowerShell shortcut colour settings

我在资源管理器上下文菜单中有一个“PowerShell提示符”,我希望它能像通常的快捷方式一样使用相同漂亮的颜色; 黑色很糟糕,并且当我经常打开一些旧式的黑色命令行窗口时,拥有不同的彩色窗口可能会令人困惑。

迄今为止,我发现了两个尝试解决此问题的问题:

  1. 仅从PowerShell中设置颜色似乎只允许某些值(ConsoleColor枚举),其中没有一个与默认快捷方式上的值匹配。
  2. 在PS配置文件中设置颜色只会使之后编写的文本遵守新的背景颜色。添加“cls”会导致它开始时出现原始颜色的不良闪烁。

是否有任何方法可以从命令行启动PowerShell(即我可以在注册表中嵌入为资源管理器上下文菜单项)并使用与快捷方式相同的设置?

9个回答

33

编辑你的配置脚本(由 $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

尽管您的选项2)表示您不喜欢这种情况,但我仍会将此答案添加以供其他人参考。 - x0n
我不知道它是那么容易实现的。现在我知道了,我就离不开它了。颜色...在控制台窗口里!太神奇了!我的 Linux 伙伴会因为沮丧而死去(控制台是他最强的论据,他固执地仍在使用 CMD.EXE 的痛苦,并不断抱怨 Windows 命令提示符的糟糕)。我现在非常爱你。 - Konrad Viltersten
1
这也可以放入版本控制,并且您可以在使用的每台计算机上共享这些设置。 - Phil
有什么办法可以指定确切的颜色值吗?我尝试过 [console]::backgroundcolor = "#FF0000"[console]::backgroundcolor = 0xFF0000(RGB),以及 [console]::backgroundcolor = 0xFFFF0000(ARGB)。 - Drew Chapin

24

以下是一个非常简单的方法:

1. 将 .LNK 添加到您的 PATHEXT 变量中。

开始 -> 运行 "sysdm.cpl" -> 高级选项 -> 环境变量

通过系统变量向下滚动,双击 PATHEXT

添加 .LNK; 如下所示:

Path Extension

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"将会打开默认的控制台颜色/配置。

你可以进一步自定义 C:\Windows\System32 中的 .lnk 文件以满足你的需求。

请注意,这只能工作是因为你已经将 .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'"

只需在命令之间加上分号。

祝你使用shell愉快。


当从上下文菜单启动时,它仍然显示为黑色 :( 但是在“运行”对话框中运行该命令可以正常工作。对你起作用吗? :/ - Danny Tuppeny
1
我更新了注册表项并描述了追加命令的过程。此外,如果闪烁问题真的很烦人,您可以考虑使用hstart.exe替换cmd.exe。你说奖励分? ;) - Rex Hardin
有趣的是,我刚刚在一台新电脑上做了这件事,只需创建注册表键来使用“开始”就可以了;我不需要对lnk/pathext做任何操作! :) cmd.exe /c start powershell -NoExit -Command "cd '%v'" - Danny Tuppeny
回复:在Windows Server 2012 R2上,我在“C:\ProgramData\Microsoft\Windows\Start Menu\Programs\System Tools”中找到了“Windows Powershell.lnk”。 - Jesse Schoff
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" - Donatello
显示剩余7条评论

13

我发现使用 concfg 工具和 scoop 来为 Powershell 安装颜色和字体非常有用:

  1. 安装 scoop:

  2. iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
    
  3. 安装 concfg:

    scoop install concfg
    
  4. 安装Solarized主题

  5. concfg import solarized
    

就是这样,感谢作者!


你可以使用 irm 'https://get.scoop.sh' -useb | iex 来安装 Scoop。这样更简短,只使用命令语法。 - Keyacom

7
正确的做法是使用注册表。
cd hkcu:/console
$0 = '%systemroot%_system32_windowspowershell_v1.0_powershell.exe'
ni $0 -f
sp $0 ColorTable00 0x00562401
sp $0 ColorTable07 0x00f0edee

1
干得好!这里有一个更符合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。为了安全起见,我从 New-Item (ni) 调用中省略了 -Force (-f),因为遗憾的是,它会丢弃任何现有目标键的值 - mklement0

6

点击系统菜单(窗口左上角的PowerShell图标),然后点击“默认值”。您可以在此更改默认颜色,并且PowerShell Prompt Here命令会将其遵守。

来源: https://superuser.com/a/523017/109736


1
这样做不会把它们全部变成黑白色吗?我明确想要复制那个漂亮的蓝色。 - Danny Tuppeny
单击“默认值”实际上会弹出一个属性窗口,您可以在那里更改默认的任何RGB颜色,这对我来说很有效,可以更改所有PowerShell窗口(包括“PowerShell Prompt Here”窗口)的默认颜色。 - Marc Stober

3
  1. 运行 regedit 命令打开注册表编辑器。
  2. 找到 HKEY_CURRENT_USER > CONSOLE 并备份整个文件夹,以防万一进行导出。
  3. 删除该文件夹。

重新启动 PowerShell,颜色方案应该已重置为默认设置。

注意:如果您有任何其他与 PowerShell(或命令提示符、Git Bash 等)相关的设置需要保留,请进一步探索 Console 文件夹以删除适当的键。


问题不是将Powershell颜色重置为默认值,而是在从命令行启动时使用快捷方式中的颜色。 - Scott

1

0
基于 @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'"

enter image description here


0

在Windows 7 Pro 64位上,使用Explore或Total Commander或Double Commander在当前文件夹中启动默认蓝白色的powershell:

  1. 开始菜单 -> 搜索PowerShell链接 -> 右键单击它 -> 属性 -> 快捷方式选项卡(默认打开的选项卡) -> 修改“起始位置”:->%CD%

enter image description here

  • 在系统PATH上的某个文件夹中创建一个名为ps.bat的批处理文件(如果您没有这样的文件夹,只需创建一个,比如C:\run\cli并将其添加到PATH系统环境变量中)。此批处理文件必须包含以下命令:

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

  • 就是这样。现在只需在资源管理器的路径栏或Total Commander或Double Commander的命令行框中输入ps即可。

    在Windows 10上,无需修改“开始菜单”中的PowerShell快捷方式,上述ps.bat文件可能只包含以下命令:

    start %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接