Windows PowerShell 完整教程
目录
- 第一部分:PowerShell 是什么?
- 它与 CMD 的区别
- 为什么你应该学习 PowerShell
- 第二部分:准备工作与环境
- 如何打开 PowerShell
- ISE 与 VS Code
- 第三部分:核心概念 - 你必须知道的基础
- 命令 (Cmdlet)
- 管道 (Pipeline)
- 对象 (Object)
- 提供程序 (Provider)
- 别名 (Alias)
- 第四部分:常用命令速查
- 文件系统操作
- 进程管理
- 服务管理
- 网络信息
- 系统信息
- 第五部分:脚本编程入门
- 第一个脚本
- 变量
- 条件语句 (
if,else) - 循环 (
for,foreach) - 函数
- 第六部分:进阶技巧与最佳实践
- 获取帮助 (
Get-Help) - 使用通配符 (, )
- 命令发现 (
Get-Command) - 错误处理 (
Try/Catch/Finally) - 配置文件 (
profile)
- 获取帮助 (
- 第七部分:学习资源与总结
- 官方文档
- 推荐书籍和网站
第一部分:PowerShell 是什么?
PowerShell 是微软开发的一个功能强大的命令行外壳和脚本语言环境,它不仅仅是命令提示符 的升级版,而是一个全新的、基于 .NET 的自动化平台。

它与 CMD 的区别
| 特性 | Windows CMD | Windows PowerShell |
|---|---|---|
| 处理数据 | 纯文本 | 结构化对象 |
| 命令 | 内置命令 (如 dir, copy) |
Cmdlet (如 Get-ChildItem, Copy-Item) |
| 扩展性 | 不易扩展 | 模块化,可以轻松添加新功能 |
| 管道 | 仅传递文本流 | 传递对象,可以无缝连接命令 |
| 脚本能力 | 基础的批处理 (.bat) |
强大的脚本语言 (.ps1) |
| 交互性 | 较弱 | 丰富的交互体验,如 Tab 自动补全 |
简单比喻:
- CMD 像一把瑞士军刀,功能固定,适合简单任务。
- PowerShell 像一个完整的工具箱,里面有各种专业工具(Cmdlet),你可以通过管道把它们组合起来,完成极其复杂的自动化任务。
为什么你应该学习 PowerShell?
- 系统管理的终极工具:无论是管理本地计算机还是成千上万台服务器,PowerShell 都是微软官方推荐的自动化工具。
- 跨平台能力:PowerShell Core 现在可以在 Windows、Linux 和 macOS 上运行,是跨平台自动化的重要选择。
- 无处不在:Windows 10/11、Windows Server、Azure 云服务、Microsoft 365 等都深度集成了 PowerShell。
- 强大的社区和生态:有海量的模块和脚本可供使用,你能想到的任务,几乎都有现成的解决方案。
第二部分:准备工作与环境
如何打开 PowerShell
最简单的方法是:
- 按
Win + X键,然后选择 “Windows PowerShell” 或 “终端” (Terminal,它集成了 PowerShell)。 - 在开始菜单搜索 “PowerShell”。
ISE 与 VS Code
-
PowerShell ISE (集成脚本环境):
- 自带的旧版编辑器,功能包括脚本编辑、调试、命令输入。
- 优点:集成度高,开箱即用。
- 缺点:界面较旧,性能不如现代编辑器,微软已不再推荐。
-
Visual Studio Code (VS Code):
(图片来源网络,侵删)- 强烈推荐! 这是目前 PowerShell 脚本开发和编辑的最佳选择。
- 安装步骤:
- 下载并安装 Visual Studio Code。
- 打开 VS Code,进入扩展市场。
- 搜索并安装
PowerShell扩展(由 Microsoft 官方发布)。
- 优点:语法高亮、智能感知、强大的调试功能、Git 集成等。
第三部分:核心概念 - 你必须知道的基础
理解这些概念是掌握 PowerShell 的关键。
命令
PowerShell 中的基本执行单元称为 Cmdlet(发音为 "command-let"),它是一个动词-名词形式的命令,
Get-Process:获取正在运行的进程。Set-Location:设置当前工作目录。Get-ChildItem:获取当前目录下的子项(文件和文件夹)。
命名规范:
- 动词:表示要执行的操作,微软有一套标准动词(如
Get,Set,New,Remove),这保证了命令的一致性。 - 名词:表示操作的对象,通常是名词的单数形式(如
Process,Item,Service)。
管道
管道是 PowerShell 的精髓,它允许你将一个命令的输出作为另一个命令的输入,这就像工厂里的流水线。

示例: 假设你想找到所有正在运行的、名称包含 "chrome" 的进程,并按内存使用量降序排列。
# CMD 的做法(非常繁琐)
tasklist | findstr "chrome"
# PowerShell 的做法(清晰、强大)
Get-Process | Where-Object { $_.Name -like "*chrome*" } | Sort-Object -Property WS -Descending
分解:
Get-Process:获取所有进程对象。- 管道符号,将前面的输出传递给后面的命令。
Where-Object { ... }:筛选管道中的对象。$_代表当前正在处理的对象。*.Name -like "*chrome*":检查进程的Name属性是否包含 "chrome"。Sort-Object -Property WS -Descending:根据WS(工作集内存) 属性对结果进行降序排序。
对象
这是 PowerShell 与 CMD 最根本的区别。Cmdlet 之间传递的不是文本,而是 .NET 对象。
当你运行 Get-Process 时,你得到的是一个包含多个进程对象的集合,每个对象都有属性(如 Name, Id, WS)和方法。
你可以直接访问这些属性:
# 获取第一个进程对象 $firstProcess = Get-Process | Select-Object -First 1 # 访问它的 Name 属性 $firstProcess.Name # 输出: svchost # 访问它的 Id 属性 $firstProcess.Id # 输出: 4
提供程序
提供程序让你能够像访问文件系统一样访问其他数据存储,它们为不同的数据源提供了一个统一的访问接口。
默认提供程序包括:
FileSystem: 访问文件和文件夹 (C:\,D:\)。Registry: 访问 Windows 注册表 (HKLM:\,HKCU:\)。Environment: 访问环境变量 (Env:\)。Alias: 访问命令别名 (Alias:\)。Variable: 访问变量 (Variable:\)。
你可以使用 Get-PSProvider 命令查看所有提供程序。
别名
别名是为常用命令提供的一个简短名称,方便快速输入。
cd是Set-Location的别名。ls是Get-ChildItem的别名。dir也是Get-ChildItem的别名。cls是Clear-Host的别名。
你可以使用 Get-Alias 查看所有别名,虽然别名方便,但在编写脚本时,建议使用完整的 Cmdlet 名称,以提高可读性和可维护性。
第四部分:常用命令速查
文件系统操作
| 命令 | 功能 | 示例 |
|---|---|---|
Get-ChildItem |
列出目录内容 |
