PowerShell 升级 & 增强

2021-03-31 2119点热度 6人点赞 0条评论

从 Windows 7 SP1 和 Windows Server 2008 R2 SP1 开始,每个 Windows 中默认随附安装有 Windows PowerShell。

长久一来,在Windows平台上都是以CMD作为主要的命令行工具在使用,但随着Windows 10的普及,开发工具的演进,CMD已经越来越跟不上时代的步伐了。

最近将Windows 10种的PowerShell升级到了最新的LTS版本,总体来说还是不错的,但命令的补全,语法支持都不尽人意,所以在这基础上增加了一些扩充。

Scoop

scoop是一个包管理系统,它类似于Mac上的Brew,能帮我们方便快捷的管理软件

安装Scoop

Set-ExecutionPolicy RemoteSigned -scope CurrentUser
iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
scoop -h

PowerShell

最新版本的PowerShell均发布在:https://github.com/PowerShell/PowerShell/releases ,直接从这里下载官方发布的releases版本安装即可。

版本的选择最好不要带 preview ,毕竟这只是预览版~

安装 PowerShellGet 包管理器

PowerShellGet 模块包含用于发现、安装、更新和发布包含来自 PowerShell gallery 和其他专用存储库的模块、DSC 资源、角色功能和脚本等项目的 PowerShell 包的 cmdlet。

# 测试是否存在
Get-Module -ListAvailable PowerShellGet

# 安装
Install-Module -Name PowerShellGet -Force

# 升级
Update-Module -Name PowerShellGet

PSReadLine & oh-my-posh & posh-git

# 更改组策略权限
Get-ExecutionPolicy -List

# 确保当前用户为RemoteSigned
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

# PSReadLine 
Install-Module -Name PSReadLine -Force 

# posh-git
Install-Module posh-git -Scope CurrentUser 

# DirColors
Install-Module DirColors -Scope CurrentUser 

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

如果下载实在恼火,可以使用 -Verbose 参数来显示详细的下载信息,同时你也可以使用Proxy来加速你的下载。

$PSDefaultParameterValues 首选项变量使你能够为任何 cmdlet 或高级函数指定自定义默认值。

# 搜索支持代理的cmdlet
Get-Command -ParameterName Proxy

# 设置代理
$Proxy = 'http://localhost:7890'
$PSDefaultParameterValues = @{
     'Install-Module:Proxy' = $Proxy
     'Update-Module:Proxy' = $Proxy
}

# 如果您已经在使用,$PSDefaultParameterValues请将新条目添加到哈希中
$Proxy = 'http://localhost:7890'
$PSDefaultParameterValues.Add('Invoke-WebRequest:Proxy', $Proxy)
$PSDefaultParameterValues.Add('Invoke-RestMethod:Proxy', $Proxy)

# 全部设置为代理
$PSDefaultParameterValues = @{ "*:Proxy"="http://localhost:7890" }

字体

默认的字体会引起部分字体不支持的情况,建议使用 https://www.nerdfonts.com 字体。其中FiraCode Nerd FontDejaVuSansMono Nerd FontCousine Nerd Font支持的最好。

{
    "profiles": {
        "defaults": {
            "fontFace": "FiraCode Nerd Font"
        }
    }
}

编辑配置文件

if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }
notepad $Profile
Import-Module posh-git
Import-Module oh-my-posh
Import-Module DirColors
Set-PoshPrompt agnoster
 
#设置预测文本来源为历史记录
$PSReadLineOptions = @{
     PredictionSource  = "History"
     HistoryNoDuplicates = $true
     HistorySearchCursorMovesToEnd = $true
     Colors = @{
         Command             = [ConsoleColor]::DarkGray
         Number              = [ConsoleColor]::DarkGreen
         Member              = [ConsoleColor]::DarkMagenta
         Operator            = [ConsoleColor]::DarkGray
         Type                = [ConsoleColor]::DarkRed
         Variable            = [ConsoleColor]::DarkYellow
         Parameter           = [ConsoleColor]::DarkGreen
         ContinuationPrompt  = [ConsoleColor]::DarkGray
         Default             = [ConsoleColor]::DarkGray
         Emphasis            = [ConsoleColor]::DarkGray
         Error               = [ConsoleColor]::DarkRed
         Selection           = [ConsoleColor]::DarkGray
         Comment             = [ConsoleColor]::DarkCyan
         Keyword             = [ConsoleColor]::DarkRed
         String              = [ConsoleColor]::DarkGray
     }
 }
Set-PSReadLineOption @PSReadLineOptions

Set-PSReadLineKeyHandler -Key Tab -Function Complete # 设置 Tab 键补全
Set-PSReadLineKeyHandler -Key "Ctrl+d" -Function MenuComplete # 设置 Ctrl+d 为菜单补全和 Intellisense
Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo # 设置 Ctrl+z 为撤销
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward # 设置向上键为后向搜索历史记录
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward # 设置向下键为前向搜索历史纪录

若需要自定义PSReadLineOption的Color,可以使用[Enum]::GetValues([System.ConsoleColor])|ForEach-Object {Write-Host $_ -ForegroundColor $_}来获取系统已有的颜色变量。同时也可以使用[ConsoleColor]::加Tab来获取支持的枚举值。

效果图

IDEA 等设置

在实际使用中,发现IDEA下显示错乱,这是由于IDEA中默认的Terminal字体用的是Consolas,这个字体不是完全支持PSReadLine,这时只需要在Setting -> Editor -> Color Scheme -> Console Font中将其指定为我们自己的字体即可。

Jalena

原创内容,转载请注明出处! 部分内容来自网络,请遵守法律适用!

文章评论