安装配置
原始的终端并不算好看,所以打算进行一番配置,以符合我的审美
安装
powershell
默认的powershell版本为5.1,将其升级为powershell 7。powershell 7默认就开启了很多功能,比如我最爱的↑↓→键快速匹配历史记录。
当前使用的版本
我的版本7.4.2。
没有7版本的进行安装
1
|
winget install --id Microsoft.PowerShell
|
我的电脑默认两个版本都安装了,所以将终端的powershell 7启用即可。
终端-设置-新配置文件-从powershell复制
路径改为:C:\Program Files\PowerShell\7\pwsh.exe
将默认值改为该配置文件。
oh-my-posh
oh-my-posh是一个类似与oh-my-zsh的美化插件,先进行安装。这里的winget我能正常使用,否则请前往官网。
1
|
winget install JanDeDobbeleer.OhMyPosh -s winget
|
配置
编辑powershell的用户配置
1
2
3
4
|
notepad $PROFILE
# 没有该文件,则创建一个新的
New-Item -Path $PROFILE -Type File -Force
|
添加以下内容保存
1
|
oh-my-posh init pwsh | Invoke-Expression
|
重启终端。
临时在当前环境中启用
1
|
$env:Path += ";C:\Users\user\AppData\Local\Programs\oh-my-posh\bin"
|
配置主题
主题是一个json配置文件,默认自带就有很多。
查看已安装主题
要使用某个主题,编辑powershell配置
将前面的语句修改为
1
|
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/<THEME_NAME>.omp.json" | Invoke-Expression
|
重启终端
安装字体
omp的主题大多需要特殊符号,所以要安装一个nerf字体。
官方推荐meslo字体,直接下载。
1
|
Invoke-WebRequest -Uri "https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/Meslo.zip" -OutFile Meslo.zip
|
解压后全选ttf文件,右键安装。
在终端-powershell7的配置文件-外观-字体,选择MesloLGM Nerd Font Mono字体,保存。
完成
到此,主题安装完成。
我选择使用的是iterm2主题,
powershell脚本
PowerShell的脚本后缀为ps1
变量
定义变量
1
2
3
4
5
6
|
# 中间可以有空格
$key = value
$list = @()
# 强类型
[int] $key = int_value
[string[]] $list = @('str_value')
|
使用变量
1
2
|
Write-Output $key
Write-Output ${key}
|
整数
浮点
字符串
数组
1
2
3
4
5
6
7
8
9
10
|
# 空数组
$list = @()
# 单行定义,可省略@()
$list = @('one','two')
$list = 'one','two'
# 多行定义,逗号可省略
$list = @(
'one'
'two'
)
|
1
2
3
4
5
6
7
8
|
$list[0] # 第一个
$list[0,2,5] # 第一、三、六个
$list[1..3] # 第二、三、四个
$list[-1] # 倒数第一个
$list1 + $list2
$list += new_value
$list * 2 # $list + $list
|
1
2
|
$list.count # 获取数量
$list.foreach({"$_"}) # 循环执行
|
1
2
3
4
5
6
7
8
9
|
$list = @(1,2,3)
$list -join '-' # 1-2-3
-join $list # 123
$list -replace "old","new" # 将old替换new
$list -split "arg" # 以arg分割
2 -in $list # True
$list -eq/ne 1 # 返回完全匹配/不匹配的数组
$list -match 1 # 返回部分匹配的数组
Write-Output -NoEnumerate $data | Get-Member # 不展开数组传递管道
|
对象数组
1
2
3
4
5
|
# 手动定义
$data = @(
[pscustomobject]@{FirstName='Kevin';LastName='Marquette'}
[pscustomobject]@{FirstName='John'; LastName='Doe'}
)
|
1
2
3
4
|
$data[1] # 访问第二个对象
$data[0].FirstName # 访问第一个对象的FirstName属性
$data.LastName # 获取所有对象的LastName属性
$data.Where({$_.FirstName -eq 'Kevin'}) # 筛选方法
|
1
2
|
$data | ForEach-Object {$_.LastName} # 循环
$data | Where-Object {$_.FirstName -eq 'Kevin'} # 筛选
|
特殊变量
1
2
3
|
$null # 空
$_ # 管道/循环当中的对象
$PSItem # 与 $_ 相同
|
泛型列表
1
2
3
4
|
using namespace System.Collections.Generic
$myList = [List[int]]@(1,2,3)
$myList.Add(4)
$myList.Remove(3)
|
控制
判断
1
2
3
4
5
6
7
|
if () {
//
}elseif () {
//
}else {
//
}
|
1
2
3
4
5
|
switch (value/value_list) {
value1 {}
value2 {}
value3 {;break}
}
|
循环