jk's notes
  • ch03 组合命令

ch03 组合命令

运维过程中不会一个个命令的敲, 而是会采用管道运行, 或将命令存储于脚本文件中运行.

一个 DEMO 运行一个服务

$mysql = 'MySQL'
Get-Service -Name $mysql
Start-Service -Name $mysql

image-20240131142702524

注意需要使用管理员运行 (按下 ctrl 在点击打开窗口).

这里的目的在于判断服务是否存在. 书中作者使用的是 wuauserv 服务.

使用管道

管道可以将前一个命令的输出, 交给后一个命令作为输入使用. 语法形式:

命令1 | 命令2 |...

中间用竖线分隔.

powershell 的管道不同于其他脚本语言, 管道中可以传递对象, 而非仅仅是字符串.

在前面的案例中需要使用 -Name 来告诉命令启动什么服务. 而使用管道可以写成:

Get-Service -Name 'MySQL' | Start-Service

这里 PowerShell 会处理参数传递的问题, 不用在 第二个命令中指明 -Name. 命令甚至可以写成:

'MySQL' | Get-Service | Start-Service

使用管道传递数组

将服务名写入一个 txt 文件中

image-20240131150041521

使用命令 Get-Content 可以读取其中内容:

image-20240131150116912

Get-Content 会逐行读取文件, 并将其添加到一个数组中返回.

可以利用该逻辑, 将读取的内容传递给 Get-Service

image-20240131150221410

注意, 记事本中服务名两端不允许有空格.

PowerShell 并不会通过管道发送数组本身, 而是将其拆包, 一个个的发送.

jk: ? 这个拆包是不是与 py 中 [表达式for 迭代变量 in 集合] 的逻辑一样?

使用管道, 数量上没有做限制, 但是如果超过 5 个以上就需要考虑重构了.

也就是说编程习惯中不会超过五个命令构成管道.

参数绑定

就是在管道传递参数的时候有一些约定, 每个命令可以有多个参数, 但是管道中不会显式的写出什么传给什么, 就需要提前约定, 这便是绑定.

然后作者利用 Get-Process 和 Get-Service 进行了一个演示, 利用帮助来查看命令的参数 (PARAMETERS)

Last Updated:
Contributors: jk