核心要点
- PowerShell 是一种脚本语言,能够帮助用户自动化完成计算机上的各种任务。
- Cmdlet 是 PowerShell 中执行单一功能的命令。 可以使用 “Get-Command” 来查看可用的命令列表。
- PowerShell 可以在 Windows、macOS 和 Linux 等操作系统上运行。
PowerShell 是一种功能强大的脚本语言,它能够以简单且可靠的方式自动化您的计算机操作。本文将向您介绍如何使用 PowerShell 在 Windows 电脑上构建脚本。
PowerShell 脚本概述
要在 Windows 系统上开始编写简单的 PowerShell 脚本,您需要掌握三个关键概念:
- Cmdlet:执行单一功能的命令。
- 参数:用于指定 Cmdlet 的具体操作内容、执行时间、目标位置以及操作方式。
- 管道:将一个 Cmdlet 及其参数的输出结果传递给另一个 Cmdlet 或函数进行处理。
通过巧妙地组合这三者,您可以创建各种脚本来帮助自动化日常任务。
下面是一个管道的示例,展示了如何组合多个 Cmdlet 来完成一项特定的任务:
要在 PowerShell 中运行这个管道,您可以使用类似于下面的命令:
Get-Object Potato | Peel-Object | Chop-Object Chips| Cook-Object DeepFry
| Place-Object Bowl
Cmdlet 详解
和所有脚本语言一样,PowerShell 内置了许多预先构建的命令,用于操作对象和执行各种任务。PowerShell 中的这些基础命令被称为 Cmdlet。
Cmdlet(发音为 command-let)是在 PowerShell 环境中使用的小型、单一功能的命令,它们以 .dll 扩展名存在。 这些轻量级的代码由于其编译特性,执行速度比函数更快。
PowerShell 中有数千个可用的 Cmdlet。您不需要掌握所有这些命令。您可以先从学习一些基本的 Cmdlet 入手,随着脚本编写经验的积累,逐步掌握更多的 Cmdlet。要查看您的计算机上已安装的 Cmdlet,请运行以下命令:
Get-Command
仔细查看结果,您会发现它们都遵循 “动词-名词” 的命名约定。这使得理解某个 Cmdlet 的作用变得更加容易。
例如,`Get-Command` 用于显示 PowerShell 中所有可用的命令;`Get-Process` 用于获取当前正在运行的进程;而 `Copy-Item` 则用于将一个或多个文件复制到指定的目录。
Cmdlet 还附带了详细的文档,包括示例、使用说明以及功能描述。
要了解有关特定 Cmdlet 及其用法的更多信息,请执行以下命令:
Get-Help <cmdlet-名称>
PowerShell 参数详解
Cmdlet 可以接受参数来改变其行为。在执行 Cmdlet 或函数时,您可以提供参数值,从而具体指定每个 PowerShell 命令的操作内容、执行时间、目标位置以及操作方式。
例如,`Get-Process` 命令会获取并列出操作系统中的所有活动进程:
但如果您只想获取特定的进程呢? 这时就可以使用参数来实现。例如,要获取所有 Slack 进程,可以将 `-Name` 参数与 `Get-Process` Cmdlet 结合使用:
Get-Process -Name Slack
执行后,您将只会看到名为 “slack” 的进程:
有些参数是 “位置” 参数,这意味着它们的名称是可选的。 在这种情况下,`Get-Process -Name Slack` 和 `Get-Process Slack` 执行相同的操作。
每个 Cmdlet 可以接受不同类型的参数。使用 `Get-Help` 命令可以在语法部分查看 Cmdlet 接受的参数。
Get-Help Get-Process
您将会看到运行给定 Cmdlet 的所有可能方法的列表:
在本例中,`Get-Process` Cmdlet 接受 `Name`、`Id`、`ComputerName`、`Module`、`FileVersionInfo` 等参数,以及其他常见的参数。这些符号的含义如下:
符号 |
名称 |
含义 |
---|---|---|
空白 |
参数不接受输入 |
|
– |
连字符 |
表示参数名称 |
<> |
尖括号 |
文本占位符 |
[] |
方括号 |
参数可以接受一个或多个值 |
{} |
花括号 |
参数接受一组值 |
接受输入的参数会指明它们需要的数据类型,例如字符串、整数、布尔值或日期时间。 例如:
Get-Process [[-Name] <string[]>]
表示 `Name` 参数接受一个或多个字符串值,而:
Get-Process -Id <int[]>
表示 `Id` 参数接受一个或多个整数值。
前面的 `Get-Process` 示例使用了 `Name` 参数来缩小结果范围。但是,如果您想将其缩小到更具体的进程,则可以使用 `Id` 参数,该参数需要一个整数值(如其语法中所述)。
Get-Process -Id 3016
执行后,您应该在列表中只看到一个进程:
创建管道
PowerShell 将所有数据视为对象。 为了构建脚本,这些对象会通过一系列由管道符号 ( `|` ) 连接的 Cmdlet 或函数进行处理。选择正确的 Cmdlet 并使用管道符号按逻辑顺序连接它们,对于编写高效的脚本至关重要。
假设您正在创建一个脚本来排序并显示文件夹中占用存储空间最大的前五个文件。虽然有更强大的方法来创建文件排序脚本,但以下一行代码更容易理解:
要在 PowerShell 中实现此功能,可以使用如下所示的管道:
Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending
| Select-Object -First 5 | Format-Table Name, Length -AutoSize
将管道保存为 PS1 脚本
现在您已经有了一个可用的管道,您可以将其保存为 PS1 脚本文件,这样您就无需每次使用它都不断输入代码。
创建 PS1 文件最简单的方法是将脚本粘贴到记事本中,并使用 `.ps1` 扩展名保存文件。
创建 PS1 文件后,您可以通过在 PowerShell 中运行 `./ScriptName.ps1` 来使用它:
恭喜!您现在可以创建 PowerShell PS1 脚本了。
PowerShell 也可在 Linux 和 macOS 上使用
PowerShell 是最适合初学者学习的脚本语言之一。虽然过去 PowerShell 仅限于 Windows 系统,但现在更新版本的 PowerShell 也可以在 macOS 和许多 Linux 发行版上使用!这使得 PowerShell 更具吸引力,因为您可以将从 Windows 上学到的知识应用到其他操作系统中。