
Microsoft PowerShell(通常称为 Windows PowerShell)提供了一种方便的方法来自动执行各种杂务,无论您是在 Windows Server 还是 Windows 工作站上工作。
系统管理员最好学习这种脚本语言,将其作为自动化任务(尤其是重复性任务)的技能,并开发高级管理任务以帮助减轻工作负载并通过可预测的、经过验证的命令执行操作。这些命令可以在本地系统或使用 PowerShell 远程处理功能的远程系统上运行,例如,更新多个系统上的 Windows 注册表。
看:(科技共和国高级版)
PowerShell 与您习惯在 IDE 中使用的编程语言(例如 Visual Studio Code 又名 VS Code)不太一样。 PowerShell 变量、cmdlet、模块和提供程序是基础,构成了强大的 PowerShell 工具来帮助完成工作。
- 变量是一个术语,用于标识特定值以便于引用和重用。
- cmdlet 是内置的 PowerShell 命令(Get 命令 cmdlet 是最常见的命令之一,具有多种用途,例如检索现有设置或通过 get-help cmdlet 寻求帮助)。
- 模块是包含多个对象(例如 cmdlet、变量等)的包。
- 提供程序是一个 .NET 程序,它提供对注册表、别名、函数、变量、文件系统和整个操作系统环境等信息的访问。
Windows PowerShell 专门在 Windows 操作系统上运行,并由 PowerShell Core 进行了增强,PowerShell Core 是一个高级版本,能够以与 Visual Studio Code 相同的方式在 Windows、Mac 和 Linux 操作系统上运行。
这是一个 Windows PowerShell 脚本编写教程,旨在作为初学者指南,说明脚本编写基础知识,以帮助初学者开始使用现有的 Windows PowerShell 脚本或 PowerShell cmdlet 或构建新的脚本或 PowerShell cmdlet。
您可以从 Windows PowerShell 文件夹下的“开始”菜单启动 Windows PowerShell,以便熟悉本 PowerShell 教程的使用。要使用的两个程序是 Windows PowerShell 和 Windows PowerShell ISE(集成脚本环境)。第一个可执行文件是命令提示符界面,第二个是基于 GUI 的界面,如下所示:

我更喜欢使用 Windows PowerShell ISE 进行 PowerShell 脚本编写,因为它提供了一个允许使用命令提示符功能的 PowerShell 控制台窗口,以及一个方便的工具栏功能区和右侧列出的命令引用,您可以单击它们来插入 PowerShell 命令并了解有关它们的更多信息。
请注意,默认可执行文件是 64 位,但出于向后兼容的目的,可以在此文件夹中找到每个文件的 32 位 PowerShell 版本。
1.PS1文件
PowerShell 语法对于新手来说可能有点令人畏惧,所以让我们从脚本(也称为 PS1 文件)的基础知识开始。 Windows PowerShell 脚本实际上只不过是一个可以在 Windows PowerShell 或 Windows PowerShell ISE 中运行的简单文本文件。 PowerShell 脚本语言通过执行一系列 PowerShell 命令(或单个命令)来运行,每个命令显示在单独的行上。对于要被视为 PowerShell 脚本的文本文件,其文件名需要以 .PS1 结尾以表示 PowerShell 扩展名。
最简单、最基本的 PowerShell 示例是一个名为 Datecheck.ps1 的文件,其中包含以下条目:
Get-Date
运行此命令将为您提供类似于以下内容的输出:
Tuesday, May 10, 2022 3:20:04 pm
2、执行权限
为了防止执行恶意脚本,PowerShell 强制执行执行策略。默认情况下,执行策略设置为“受限”,这意味着 PowerShell 脚本将不会运行。您可以使用以下 cmdlet 确定当前的执行策略:
Get-ExecutionPolicy
您可以使用的执行策略有:
- 受限制的– 脚本不会运行。
- 远程签名–本地创建的脚本将运行,但从互联网下载的脚本将不会运行(除非它们由受信任的发布者进行数字签名)。
- 全部签名– 脚本仅在经过可信发布者签名后才会运行。
- 无限制–无论脚本来自何处以及是否经过签名,脚本都会运行。
您可以使用以下 cmdlet 设置 PowerShell 的执行策略:
Set-ExecutionPolicy <policy name>
注意:在 PowerShell 命令提示符中键入时,您可以输入部分命令,然后按 Tab 键自动填充其余部分(或显示与您输入的内容匹配的多个选项)。例如,输入 Set-Ex 并按 Tab 键将自动填充整个 Set-ExecutionPolicy 命令并节省您一些时间。
3. 运行脚本
多年来,如果您想从命令行运行可执行文件,做法是导航到文件的路径,然后键入可执行文件的名称。然而,这种古老的方法不适用于 PowerShell 脚本。
如果要执行 PowerShell 脚本,通常必须键入完整路径和文件名。例如,要运行名为 SCRIPT.PS1 的脚本,您可以键入:
C:\脚本\Script.ps1
最大的例外是,如果包含脚本的文件夹位于系统路径中,则只需键入脚本名称即可执行脚本。如果您已经位于包含脚本的文件夹中,还可以使用一个快捷方式。在这种情况下,您可以输入 .\ 和脚本名称,而不是输入脚本的完整路径。例如,您可以输入:
.\Script.ps1
4. 流水线
流水线是将一个命令的输出输入到另一个命令的术语。这允许第二个命令对其收到的输入进行操作。要通过管道传输两个命令(或 cmdlet),只需用管道符号 (|) 将它们分隔开。
为了帮助您了解管道的工作原理,假设您想要创建一个在服务器上运行的进程列表,并按进程 ID 号对该列表进行排序。您可以使用 Get-Process cmdlet 获取进程列表,但该列表不会排序。但是,如果将 cmdlet 的输出通过管道传输到 Sort-Object ID 命令中,则列表将被排序。使用的命令字符串如下所示:
Get-Process | Sort-Object ID
5. 变量
尽管您可以使用管道将一个命令的输出输入到另一个命令中,但有时仅靠管道无法完成工作。当您将一个命令的输出通过管道传输到另一个命令时,会立即使用该输出。有时,您可能需要将输出存储一段时间,以便稍后使用(或重复使用)。这就是 PowerShell 变量可以发挥作用的地方。
人们很容易将变量视为存储值的存储库,但在 PowerShell 中,变量可以存储命令的完整输出。例如,假设您要将服务器上运行的进程列表存储为变量。为此,您可以使用这行代码:
$a = Get-Process
这里,变量被命名为$a。如果您想使用该变量,只需按名称调用即可。例如,输入$a在屏幕上打印变量的内容。
您可以将变量分配给已通过管道连接在一起的多个命令的最终输出。只需用括号将命令括起来即可。例如,要按进程 ID 对正在运行的进程进行排序,然后将输出分配给变量,您可以使用以下命令:
$a = (Get-Process | Sort-Object ID)
运行“echo $a”将执行您分配给变量的命令。
6.@符号
通过使用@符号,您可以将列表的内容转换为数组。例如,采用以下代码行,它创建一个名为 $Procs 的变量,其中包含多行文本(一个数组):
$procs = @{name="explorer","svchost"}
您还可以在使用变量时使用 @ 符号,以确保将其视为数组而不是单个值。例如,下面的代码行将针对我刚才定义的变量运行 Get-Process cmdlet。这样做时,Windows 将显示 Windows 资源管理器和 Svchost 使用的所有进程。请注意变量名称前面如何使用 @ 符号,而不是我们通常看到的美元符号:
Get-Process @procs
7. 分裂
分割运算符根据您指定的字符分割文本字符串。例如,假设您要将一个句子分解为一个由句子中每个单词组成的数组。您可以使用如下命令来完成此操作:
"This is a test" -split " "
结果如下:
这
是
一个
测试
8. 加入
正如 split 可以将文本字符串拆分为多个部分一样,连接运算符可以将多个文本块合并为一个。例如,此行将创建一个由我的名字和姓氏组成的文本字符串:
"Scott","Matteson" -join " "
命令末尾引号之间的空格告诉 Windows 在两个文本字符串之间插入一个空格。
9. 断点
如果脚本包含错误,运行新创建的 PowerShell 脚本可能会产生意想不到的后果。保护自己的一种方法是在脚本中的战略位置插入断点。这样,您可以在处理整个事情之前确保脚本按预期工作。
插入断点的最简单方法是按行号。例如,要在脚本的第 10 行插入断点,您可以使用如下命令:
Set-PSBreakpoint -Script C:\Scripts\Script.ps1 -Line 10
您还可以将断点绑定到变量。因此,如果您希望脚本在 a$ 的内容发生更改时中断,您可以使用如下命令:
Set-PSBreakpoint -Script C:\scripts\Script.ps1 -variables a
请注意,我没有在变量名称后面包含美元符号。
PSBreakpoint 可以使用许多动词,包括 Get、Enable、Disable 和 Remove。
10. 步骤
调试脚本时,有时可能需要逐行运行脚本。为此,您可以使用 PowerShell ISE 中的单步执行过程来使脚本在每行之后暂停,无论断点是否存在。使用概述的功能在下表中.

