Powershell的配置、脚本用法

对终端的powershell进行配置、美化,并记录ps1脚本的使用方法。

安装配置

原始的终端并不算好看,所以打算进行一番配置,以符合我的审美

安装

powershell

默认的powershell版本为5.1,将其升级为powershell 7。powershell 7默认就开启了很多功能,比如我最爱的↑↓→键快速匹配历史记录。

当前使用的版本

1
$psversiontable

我的版本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配置文件,默认自带就有很多。

查看已安装主题

1
Get-PoshThemes

要使用某个主题,编辑powershell配置

1
notepad $PROFILE

将前面的语句修改为

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}
}

循环

1
for
记录我所经历的。
使用 Hugo 构建
主题 StackJimmy 设计