PowerShell操作集锦

  |  

摘要: PowerShell 的一些操作

【对数据分析、人工智能、金融科技、风控服务感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:潮汐朝夕
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


Bash类似于C,而PowerShell则类似于Python

Windows Terminal

相当于 PowerShell 的客户端。将包括 PowerShell 在内的很多东西集成了进来。

文档参考:安装并开始设置 Windows 终端。从 Microsoft Store 安装即可。

再 Terminal 的设置中,可以打开 Json 文件。在其中搜索 powershell.exe,再对应的块中增加以下一行,实现透明效果:

1
"acrylicOpacity": 0.8

此后均用 Windows Terminal 使用 PowerShell。

快捷键

Windows Terminal 的快捷键可以通过【设置-操作】来查看,打开对应的 json 之后可以修改,其中建议把 Ctrl+v 与粘贴的对应删掉,因为在 vim 中要用于纵向编辑。

分屏

Windows Terminal 的分屏快捷键如下:

1
2
3
4
5
6
7
8
水平分屏 alt + shift + - (减号)
垂直分屏 alt + shift + + (加号)
切换当前的分屏视图:alt + left/right/up/down
调整分屏的窗口的大小:alt + shift + left/right/up/down

缩放当前视图:ctrl + +/-/鼠标滚轮

退出当前分屏视图:直接输入 exit

终端操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Ctrl+d/exit 退出当前Terminal
Ctrl+l/clear 清除屏幕
Ctrl+Alt+t/Ctrl+shift+n 打开新终端窗口
Ctrl+shift+t 打开新终端标签页
Ctrl+shift+c 复制
Ctrl+shift+v 黏贴
Ctrl+Pageup/Pagedown 左右切换标签页
Ctrl+s 暂停屏幕输出
Ctrl+q 继续屏幕输出
Ctrl+k 删除当前光标位置至末尾的所有内容
Ctrl+u 删除当前光标位置至开头的所有内容
Shift+Pageup/Pagedown 上下滚动屏幕
F11 全屏切换
Ctrl+win+上下键 切换console控制台的最大化
Ctrl+Alt+数字 切换打开的控制台
Ctrl+Shift+数字 打开新的控制台
Shift+Alt++/= 横向打开新控制台
Shift+Alt+_/- 纵向打开新控制台
Shift+Alt+方向键 控制控制台尺寸
Alt+方向键 在本标签内切换控制台
Ctrl+Shift+w 关闭当前控制台

光标移动

1
2
3
4
5
6
7
8
9
Ctrl + a 移动到本行开头
Ctrl + e 移动到本行结尾
Ctrl + p 上一个命令(或者方向键的上箭头)
Ctrl + n 下一个命令(或者方向键的下箭头)
Alt + b 往回移动一个word(或者Option+Right-Arrow)
Alt + f 往前移动一个word(或者Option+Left-Arrow)
Ctrl + f 往前移动光标
Ctrl + b 往回移动光标
Ctrl + xx 选中当前光标字符与本行首字符之间的所有内容

美化

posh-git 模块

posh-git 提供类似于 oh-my-zsh 一样的 git 显示分支的信息。

1
Install-Module posh-git

DirColors 模块

DirColors 让 ls 等命令可以像 Unix 系统终端一样具有颜色。

1
Install-Module DirColors

oh-my-posh 模块

oh-my-posh 类似于 oh-my-zsh,提供了很多主题:oh my posh 主题

使用 scoop 安装:

1
scoop install https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/oh-my-posh.json

然后再 $PROFILE 中添加以下内容:

1
oh-my-posh init pwsh --config ~/.custom.omp.json | Invoke-Expression

使用 Scoop 安装 oh-my-posh 时会自动设置环境变量 POSH_THEMES_PATH,在该目录下选择一个主题,将对应的 json 文件替换前面命令的 ~/.custom.omp.json

接下来需要安装 oh-my-posh 适配的字体,参考 Font,其中对字体的描述如下:

Oh My Posh was designed to use Nerd Fonts. Nerd Fonts are popular fonts that are patched to include icons. We recommend Meslo LGM NF, but any Nerd Font should be compatible with the standard themes.

安装字体命令如下:

1
oh-my-posh font install

安装之后,在 Terminal 的 Setting.json (CTRL + SHIFT + ,) 中添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"profiles":
{
"defaults":
{
"font":
{
"face": "MesloLGM NF",
"size": 12,
"weight": "thin"
}
}
}
}

Shell 中加载模块

在配置文件 $PROFILE 中添加以下内容:

1
2
3
Import-Module DirColors
Import-Module posh-git
oh-my-posh init pwsh --config $env:POSH_THEMES_PATH/pure.omp.json | Invoke-Expression

运维

安装模块

1
Install-Module [moudel name] -Scope CurrentUser # 只为当前用户安装

查看手册

通过 help 查看手册,以 ls 为例:

1
help ls

结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
名称
Get-ChildItem

摘要
Gets the items and child items in one or more specified locations.


语法
Get-ChildItem [[-Filter] <String>] [-Attributes {ReadOnly | Hidden | System | Directory | Archive | Device | Normal | Temporary | SparseFile | ReparsePoint | Compressed | Offline | NotContentIndexed | Encry
pted | IntegrityStream | NoScrubData}] [-Depth <UInt32>] [-Directory] [-Exclude <String[]>] [-File] [-Force] [-Hidden] [-Include <String[]>] -LiteralPath <String[]> [-Name] [-ReadOnly] [-Recurse] [-System]
[-UseTransaction] [<CommonParameters>]

Get-ChildItem [[-Path] <String[]>] [[-Filter] <String>] [-Attributes {ReadOnly | Hidden | System | Directory | Archive | Device | Normal | Temporary | SparseFile | ReparsePoint | Compressed | Offline | NotC
ontentIndexed | Encrypted | IntegrityStream | NoScrubData}] [-Depth <UInt32>] [-Directory] [-Exclude <String[]>] [-File] [-Force] [-Hidden] [-Include <String[]>] [-Name] [-ReadOnly] [-Recurse] [-System] [-U
seTransaction] [<CommonParameters>]


说明
The Get-ChildItem cmdlet gets the items in one or more specified locations. If the item is a container, it gets the items inside the container, known as child items. You can use the Recurse parameter to get
items in all child containers.

A location can be a file system location, such as a directory, or a location exposed by a different Windows PowerShell provider, such as a registry hive or a certificate store.


相关链接
Online Version: http://go.microsoft.com/fwlink/?LinkId=821580
Get-Item
Get-Location
Get-Process
Get-PSProvider

备注
若要查看示例,请键入: "get-help Get-ChildItem -examples".
有关详细信息,请键入: "get-help Get-ChildItem -detailed".
若要获取技术信息,请键入: "get-help Get-ChildItem -full".
有关在线帮助,请键入: "get-help Get-ChildItem -online"

重定向到文件

可以用重定向符号或者out-file命令进行重定向。

1
2
get-date | Out-File D:\chengzhaoxi\tmp\date.txt
get-date > D:\chengzhaoxi\tmp\date.txt

运行脚本

脚本文件(.ps1 扩展名)是命令集合,PowerShell 可以按顺序执行来完成多个动作。

但注意:与命令提示符不同看,默认安全协议会阻止所有脚本的运行。

打开脚本文件 hello.ps1,输入以下内容:

1
Write-Host "Congratulations!"

执行以下命令更改执行策略:

1
Set-ExecutionPolicy RemoteSigned

Win10 上,PowerShell 有 4 个执行策略:

  • Restricted:受限制,停止运行任何脚本。
  • RemoteSigned:远程签名,运行在电脑上创建的脚本,但是,在另一台计算机上创建的脚本将不会运行,除非它们包含受信任的发布者的签名。
  • AllSigned:全部签名,只要受信任的发布者签名,所有脚本都将运行。
  • Unrestricted:无限制,无任何限制地运行任何脚本。

之后,执行脚本的命令如下:

1
& .\hello.ps1

可以在控制台打印 Congratulations!

按更新时间显示文件

1
2
Get-ChildItem | Sort-Object -Property LastWriteTime
Get-ChildItem | Sort-Object -Property LastWriteTime -Descending

进入 D 盘

1
d:

搜索

1
ls -R | findstr "foo"
1
2
ls -R | Select-String pattern 
ls -R | Select-String -Pattern <正则表达式>

可以建立别名:

1
new-alias grep Select-String

递归搜索

1
Get-ChildItem <文件夹> -Recurse | Select-String -Pattern <正则表达式>

模糊搜索

1
get-childitem -Recurse -Include *.py

仅显示文件夹

1
Get-ChildItem fold -Attributes Directory

环境变量

查看

显示所有环境变量和值:

1
dir env:

使用通配符过滤里面带有data的环境变量(不分大小写):

1
dir env:*data*

查看具体环境变量 Path 的结果:

1
$env:Path

结果是用分号分隔的单行字符串,可以用下面命令进行分隔。

1
$env:Path -split ";"

设置

1
$env:test_env_var = "test_env_var_value"

移除

1
rm env:test_env_var

在已有环境变量上新增信息

1
$env:path = $env:path + ";D:\test"

查看命名位置

类似 Linux 的 which。

1
gcm ...

通过关键字查找命令

1
gcm | select-string ...

行数/对象个数

1
2
ls | measure
cat file | measure

查看进程

1
ps | more

通过正则查找进程

1
2
get-process -name exp*, power*  # 使用正则查找进程
get-process | select-string <pattern> # 效果同上

通过 Id/Name 杀掉进程

1
2
stop-process <pid>
kill <pid>

echo

1
2
3
message="hello"
echo $message
Write-Output $message

实现 Linux 命令

du -sh

在 PowerShell 实现 du -sh。建立文件 filesize.ps1,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Function filesize {
[cmdletbinding()]
Param($path='./' )

dir -Path $path -Force |
ForEach-Object -Process {
$length = 0
dir -Path $_.fullname -Recurse -Force | ForEach-Object{
$length += $_.Length
}

$common = "$($_.name) "
if ($length -gt 1GB) {
$l = $length/1GB
$common + "{0:n1} GB" -f $l
# $_.name + "文件夹的大小为: {0:n1} GB" -f $l
} elseif ($length -gt 1MB) {
$l = $length/1MB
$common + "{0:n1} MB" -f $l
# $_.name + "文件夹的大小为: {0:n1} MB" -f $l
} else {
$l = $length/1KB
$common + "{0:n1} KB" -f $l
}
}
}

然后打开文件

1
vim $PROFILE

添加以下内容:

1
Import-Module "<路径>/filesize.ps1"

之后的用法如下:

1
2
filesize
filesize -path "../script"

which

$PsHome 下创建文件 profile.ps1,添加以下内容:

1
2
3
4
5
Function WHICHCMD {
$(Get-Command $args[0]).Source;
}

Set-Alias -Name which -Value WHICHCMD

之后再打开 PowerShell 就可以用 which 了。


Share