jk's notes
  • ch01 基础入门

ch01 基础入门

PowerShell 的名字来源于两处: 一个是命令行 shell, 另一个是脚本语言.

该 shell 自 win7 开始默认被安装在 win 上, 在 Linux 和 MacOS 中也有 PowerShell Core.

使用 powsh 可以将从开发到部署, 以及批量构建环境做成脚本, 进行自动化处理.

从本章开始, 首先介绍基本的命令, 然后进阶是各种函数, 脚本, 以及自定义模块. 本章介绍一些基本命令, 以及如何获取帮助.

打开 PowerShell 命令行

本书使用 v1.5 的版本. 不同版本不影响使用学习, 从 v2 开始, 基本语法没有大的变化.

我现在使用的是 7.4.0 (2024年1月9日).

作者打开的 PowerShell 还是蓝色屏幕的.

提示符 (prompt) PS> 表示从这里开始输入. 作者会右键标题栏, 以使用管理员运行, 来获得更高权限.

使用 DOS 命令

DOS 命令在 PowerShell 中完全兼容, 可以直接使用. 但是这些 DOS 命令并非真正的命令, 是 PowerShell 中命令的别名 (aliases) 或转换来的伪命令(pseudonym).

尝试一下切换目录, cd 命令是 change directory 的简称. dir 是查看当前目录下的内容.

PS> cd .\Windows\
PS> dir

使用 Tab 补全

  • 命令不用输入完整, 出现开头的字符后, 可以使用 Tab 补全命令, 不唯一时会依次暂时后续的所有可用命令.
  • Tab 不仅可以用在命令补全上, 还可以使用在 参数补全 上. 例如输入 Get-Content - 后再按下 Tab 则会补切换展示参数.
  • Tab 是向后查找可用内容, 如果要向前回查, 使用 Shift + Tab

使用 cls 来清屏. 如果想要查看有哪些命令, 以及该命令与 PowerShell 的对应可以使用:

PS> Get-Alias

image-20240109093155176

探索 PowerShell 命令

与其他语言一样, PowerShell 也有命令, 它是内置可执行的具名的表达式. 你也可以定义自己的命令. 如果命令不存在, 会出现红色报错提示. 例如:

image-20240109094401074

可以使用 Get-Command 来查看命令

image-20240109095147299

image-20240109095207935

每一条命令都有一个命名范式: 动词-名词. 它是 PowerShell 的一个独有特征. 建议遵守. PowerShell 的命名基本上可以看出其作用.

Powershell 命令分为一下几类:

  • cmdlet. 通常微软提供的内置命令多是 cmdlet, 大部分使用 C# 编写.
  • 函数. 它是使用 Powershell 编写的命令. 函数与 cmdlet 是 Powershell 最常用的两种命令类型.
  • 别名
  • 外部脚本

从 Get-Command 命令返回的第一列 CommandType 可以看到命令的类型.

PowerShell 中大多数命令都有参数, 用于定制命令的行为. 例如在 Get-Command 中过滤出动作 Get 的命令, 可以使用 Get-Command -Verb Get. 可见输出依旧很多, 如果想要固定名词, 可以使用 Get-Command -Verb Get -Noun Content:

image-20240131092245278

可以组合使用 -Verb 和 -Noun, 如果确定了完整名字, 可以使用 -Name

Get-Command -Name Get-Content

获取帮助

显示文档

类似于 Linux 中的 man 命令, PowerShell 提供了 help 命令和 Get-Help cmdlet.

这两个命令的返回不完全一样. help 命令更为详细.

返回的帮助信息分了几个块:

image-20240131093037344

分别描述, 命令名字(NAME), 语法(SYNTAX), 别名(ALIASES), 以及一些说明(REMARK).

详细的说明可以使用 help 命令: help Get-Command.

获取帮助的时候, -Name 的取值支持通配符 *, 可以匹配一到多个字符.

更新文档

PowerShell 的文档是动态更新的. 使用命令 Update-Help 来更新.

注意, 文档不是全部公开的, 会有第三方的, 所以该命令可能会返回错误.

Last Updated:
Contributors: jk