美化PowerShell

美化PowerShell

Posted by RN on April 27, 2020

前言

Windows 10的PowerShell,相比于之前的命令行,视觉上仅是由“黑框”变成“蓝框”,我根据在网上的教程,亲自实践,对PowerShell进行了一番美化。 美化有两个版本,一种是直接美化(下图右),一种是结合Windows应用商店的Windows Terminal(下图左)进行美化。 美化成果

准备

我们需要对PowerShell进行美化,做法是在PowerShell里面加一个PowerLine。 安装PowerLine要先安装oh-my-posh,首先打开一个PowerShell,输入

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

如果是想安装到所有用户,应用管理员权限打开PowerShell,输入

Install-Module posh-git
Install-Module oh-my-posh

安装的过程中会提示是否允许不可信来源,输入Y并回车表示同意即可。 出于安全考虑,PowerShell默认会禁用脚本运行,此时需要输入 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser(当前用户)或Set-ExecutionPolicy RemoteSigned(所有用户,需要管理员权限)修改PowerShell安全策略。 修改好后,执行下面的命令:

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme PowerLine

如果你的电脑没有安装Git,则会在输入Import-Module posh-git时报错,把这一行去掉即可(下同)。 但是以上命令仅对当前PowerShell有用,若要每次启动都加载,则需要打开%USERPROFILE%\Documents\WindowsPowerShell,新建一个文本文档,重命名为Microsoft.PowerShell_profile.ps1(注意,扩展名为.ps1),输入以下内容并保存:

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme PowerLine

完成这些,基础准备就配置好了,但是目前打开的时候还是会有乱码。这时候需要设置字体。

字体

对于命令行,优先考虑支持TrueType的等宽字体。 所以这里推荐一个开源的字体更纱等距黑体即Sarasa Term SC 这款字体在GitHub上即可下载,或者国内镜像。选择名字中带有ttf的压缩包,下载后不要全部解压(全部解压文件很大),直接打开压缩包,找到sarasa-term-sc-regular.ttf安装即可。 安装好字体后需要对字体进行注册,打开注册表编辑器,定位到计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink,新建一个多字符串值,名字为你使用的字体的名字,如Sarasa Term SC,值为

MICROSS.TTF,Microsoft Sans Serif,108,122
MICROSS.TTF,Microsoft Sans Serif
MINGLIU.TTC,PMingLiU
MSMINCHO.TTC,MS PMincho
BATANG.TTC,Batang
MSYH.TTC,Microsoft YaHei UI
MSJH.TTC,Microsoft JhengHei UI
YUGOTHM.TTC,Yu Gothic UI
MALGUN.TTF,Malgun Gothic
SEGUISYM.TTF,Segoe UI Symbol

如果你使用的就是刚刚推荐的更纱等距黑体,则可以新建文本文档,将以下内容复制进去,保存并修改扩展名为.reg,双击导入即可。

Windows Registry Editor Version 5.00
​
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Sarasa Term SC"=hex(7):4d,00,49,00,43,00,52,00,4f,00,53,00,53,00,2e,00,54,00,\
  54,00,46,00,2c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,\
  00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,2c,00,31,00,\
  30,00,38,00,2c,00,31,00,32,00,32,00,00,00,4d,00,49,00,43,00,52,00,4f,00,53,\
  00,53,00,2e,00,54,00,54,00,46,00,2c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,\
  6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,\
  00,66,00,00,00,4d,00,49,00,4e,00,47,00,4c,00,49,00,55,00,2e,00,54,00,54,00,\
  43,00,2c,00,50,00,4d,00,69,00,6e,00,67,00,4c,00,69,00,55,00,00,00,4d,00,53,\
  00,4d,00,49,00,4e,00,43,00,48,00,4f,00,2e,00,54,00,54,00,43,00,2c,00,4d,00,\
  53,00,20,00,50,00,4d,00,69,00,6e,00,63,00,68,00,6f,00,00,00,42,00,41,00,54,\
  00,41,00,4e,00,47,00,2e,00,54,00,54,00,43,00,2c,00,42,00,61,00,74,00,61,00,\
  6e,00,67,00,00,00,4d,00,53,00,59,00,48,00,2e,00,54,00,54,00,43,00,2c,00,4d,\
  00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,59,00,61,00,48,00,\
  65,00,69,00,20,00,55,00,49,00,00,00,4d,00,53,00,4a,00,48,00,2e,00,54,00,54,\
  00,43,00,2c,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,\
  4a,00,68,00,65,00,6e,00,67,00,48,00,65,00,69,00,20,00,55,00,49,00,00,00,59,\
  00,55,00,47,00,4f,00,54,00,48,00,4d,00,2e,00,54,00,54,00,43,00,2c,00,59,00,\
  75,00,20,00,47,00,6f,00,74,00,68,00,69,00,63,00,20,00,55,00,49,00,00,00,4d,\
  00,41,00,4c,00,47,00,55,00,4e,00,2e,00,54,00,54,00,46,00,2c,00,4d,00,61,00,\
  6c,00,67,00,75,00,6e,00,20,00,47,00,6f,00,74,00,68,00,69,00,63,00,00,00,53,\
  00,45,00,47,00,55,00,49,00,53,00,59,00,4d,00,2e,00,54,00,54,00,46,00,2c,00,\
  53,00,65,00,67,00,6f,00,65,00,20,00,55,00,49,00,20,00,53,00,79,00,6d,00,62,\
  00,6f,00,6c,00,00,00,00,00

配置PowerShell

打开PowerShell,在菜单栏右键,分别配置属性和默认值,在字体一栏选择你刚刚配置的字体,并设置合适的字号;在颜色一栏分别对“屏幕文字”和“屏幕背景”进行配置,可以调节下面的不透明度以实现半透明的效果;在终端一栏,可以设置光标的形状。配置完成后点击确定,然后重启PowerShell即可。 如果是使用VSCode的用户,需要同时配置一下VSCode。 打开VSCode,打开设置,搜索Font Family,在其中加入你字体的名字,如'Sarasa Term SC',注意以英文逗号隔开。

使用Windows Terminal

注意:由于Windows Terminal版本更新,新版本的设置文件内容有改动,所以本教程已过时,我会尽早更新新版本教程

安装

在Windows应用商店里,微软提供了UWP版的终端,直接在应用商店搜索Windows Terminal安装即可。

配置

Windows Terminal的配置文件储存在%USERPROFILE%\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\profiles.json文件里,接下来就是对这个文件进行修改。 由于可配置项有很多,这里只放一个精简的配置,可以直接覆盖到json文件中。

{
    "$schema": "https://aka.ms/terminal-profiles-schema",
    "globals": {
        "alwaysShowTabs": true,
        "defaultProfile": "{aa5da293-b75a-4629-bd3a-49f9a71379e2}",
        "initialCols": 120,
        "initialRows": 30,
        "requestedTheme": "system",
        "showTabsInTitlebar": true,
        "showTerminalTitleInTitlebar": true,
        "wordDelimiters": " ./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}~?\u2502"
    },
    "profiles": [
        {
            "acrylicOpacity": 1,
            "closeOnExit": true,
            "colorScheme": "Dark+",
            "commandline": "powershell.exe",
            "cursorColor": "#ffffff",
            "cursorShape": "bar",
            "fontFace": "Sarasa Term SC",
            "fontSize": 12,
            "guid": "{aa5da293-b75a-4629-bd3a-49f9a71379e2}",
            "historySize": 9001,
            "name": "PowerShell",
            "padding": "0, 0, 0, 0",
            "snapOnInput": true,
            "startingDirectory": "%USERPROFILE%",
            "useAcrylic": false,
            "tabTitle": "PowerShell"
        },
        {
            "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
            "hidden": false,
            "name": "Azure Cloud Shell",
            "source": "Windows.Terminal.Azure"
        }
    ],
    "schemes": [
        {
            "name": "Dark+",
            "black": "#000000",
            "red": "#cd3131",
            "green": "#0dbc79",
            "yellow": "#e5e510",
            "blue": "#2472c8",
            "purple": "#bc3fbc",
            "cyan": "#11a8cd",
            "white": "#e5e5e5",
            "brightBlack": "#666666",
            "brightRed": "#f14c4c",
            "brightGreen": "#23d18b",
            "brightYellow": "#f5f543",
            "brightBlue": "#3b8eea",
            "brightPurple": "#d670d6",
            "brightCyan": "#29b8db",
            "brightWhite": "#e5e5e5",
            "background": "#0e0e0e",
            "foreground": "#cccccc"
        }
    ]
}

自定义配置

对于Windows Terminal,我们可以根据规则自定义配置文件。 打开上面提到的profiles.json,你可以看到:

    "globals": {
        "alwaysShowTabs": true,
        "defaultProfile":,
        "initialCols": 120,
        "initialRows": 30,
        "requestedTheme": "system",
        "showTabsInTitlebar": true,
        "showTerminalTitleInTitlebar": true,
        "wordDelimiters": " ./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}~?\u2502"
    }//......

alwaysShowTabs是是否永远显示标签栏。 defaultProfile是默认启动配置,GUID对应下面的profiles里的配置。你可以自己按照格式添加profiles配置并加在里面,不同的配置需要不同的GUID,在PowerShell里输入[System.Guid]::NewGuid().ToString()即可获得一个随机的GUID。 initialCols和initialRows表面默认终端的长和宽。

往下翻会有profiles,如以下内容:

"profiles": [
        {
            "acrylicOpacity": 1,
            "closeOnExit": true,
            "colorScheme": "Dark+",
            "commandline": "powershell.exe",
            "cursorColor": "#ffffff",
            "cursorShape": "bar",
            "fontFace": "Sarasa Term SC",
            "fontSize": 12,
            "guid": "{aa5da293-b75a-4629-bd3a-49f9a71379e2}",
            "historySize": 9001,
            "name": "PowerShell",
            "padding": "0, 0, 0, 0",
            "snapOnInput": true,
            "startingDirectory": "%USERPROFILE%",
            "useAcrylic": false,
            "tabTitle": "PowerShell"
        }//......
    ]

acrylicOpacity是不透明度。 colorScheme是颜色主题,具体配置见下文。 commandline是要启动的Shell。 cursorColor是光标颜色。 cursorShape是光标样式,bar是竖条;empytBox是中空矩形;filledBox是实心矩形;vintage是老式下划线。 fontFace和fontSize分别是字体和字号。 historySize是缓冲区大小。

再往下翻就是schemes,这里面就是刚刚提到的颜色主题配置,对于颜色主题,可以直接在这里找到颜色预览,挑选好后记住名字,然后点击这里里面找到配置信息并加入到schemes里,然后修改配置的颜色主题即可。

结束

完成上面的配置,就基本完成了。动手能力强的可以进一步深度改造。本篇文章参考了Windows Terminal 美化实例。