PowerShell 教程:从入门到实践
PowerShell 不仅仅是一个命令行工具,它是一个功能强大的跨平台的任务自动化和配置管理框架,对于 Windows 用户、系统管理员和开发者来说,掌握 PowerShell 是一项非常重要的技能。

第一部分:初识 PowerShell
什么是 PowerShell?
想象一下,你以前使用的是 cmd.exe(那个经典的黑色窗口),PowerShell 是它的超级升级版。
- 面向对象:PowerShell 的核心是处理对象,而不仅仅是纯文本,这使得数据传递和处理更加结构化和强大。
- 脚本语言:它拥有完整的编程语言功能(变量、循环、函数、类等),可以编写复杂的脚本来实现自动化。
- 管道:这是 PowerShell 的精髓,你可以像工厂流水线一样,将一个命令的输出(对象)作为另一个命令的输入,轻松组合命令完成复杂任务。
- 模块化:功能以模块形式提供,可以按需加载,保持环境的轻量。
- 跨平台:PowerShell 不仅在 Windows 上运行,还可以在 Linux 和 macOS 上使用。
如何启动 PowerShell?
在 Windows 10/11 上,有多种方式:
- 最推荐的方式:按
Win键,输入PowerShell,然后选择 "Windows PowerShell" 或 "终端" (Terminal),终端是新版,集成了 PowerShell、命令提示符和 Azure Cloud Shell,非常强大。 - 通过运行对话框:按
Win + R,输入powershell,然后回车。 - 通过开始菜单:在“开始”菜单中找到 "Windows PowerShell" 文件夹并启动。
启动后,你会看到一个蓝色的窗口,提示符通常看起来像这样:PS C:\Users\YourName>
(这是一个典型的 PowerShell 窗口)

第二部分:PowerShell 基础语法
命令的基本结构
PowerShell 的命令遵循一个统一的格式:动词-名词
- 动词:表示要执行的操作。
Get,Set,New,Remove,Start,Stop,这让你能快速猜测命令的功能。 - 名词:表示操作的对象。
Process,Service,Item,User。
示例:
Get-Process:获取进程。Stop-Service:停止服务。New-Item:新建一个项目(如文件或文件夹)。
获取帮助
PowerShell 最好的特性之一就是它内置的、非常完善的帮助系统,任何时候你遇到不懂的命令,都可以用 Get-Help。
Get-Help <命令名>:获取命令的基本帮助。Get-Help <命令名> -Detailed:获取更详细的信息,包括参数描述。Get-Help <命令名> -Full:获取完整的帮助文档,包括示例。Get-Help <命令名> -Examples:只查看使用示例。
示例:

Get-Help Get-Process
这是学习 PowerShell 的最佳习惯!
使用别名
为了方便用户和兼容旧习惯,PowerShell 提供了别名,别名是短命令,映射到完整的 动词-名词 命令。
ls->Get-ChildItem(列出当前目录下的内容)cd->Set-Location(切换目录)pwd->Get-Location(获取当前目录)cat->Get-Content(查看文件内容)copy->Copy-Item(复制文件/文件夹)del/rm->Remove-Item(删除文件/文件夹)
注意:虽然别名方便,但为了脚本的可读性和长期维护,强烈建议在编写脚本时使用完整的命令名。
管道
管道是 字符,它将左边命令的输出(对象)作为右边命令的输入。
示例: 假设你想查看当前系统中所有正在运行的进程,并找出名字包含 "chrome" 的进程。
Get-Process会获取所有进程对象。Where-Object是一个筛选命令。- 我们用管道把它们连接起来:
Get-Process | Where-Object {$_.Name -like "*chrome*"}
解释一下这个命令:
Get-Process:获取所有进程。- 将进程对象传递给下一个命令。
Where-Object {...}:筛选符合条件的对象。$_:这是一个特殊变量,代表当前正在处理的管道对象,它代表每一个进程。Name -like "*chrome*":检查进程的Name属性是否匹配通配符模式 "chrome"(即包含 "chrome")。
变量
变量用于存储数据,变量名以 符号开头。
# 定义一个变量 $myName = "PowerShell Learner" $processCount = (Get-Process).Count # 使用变量 Write-Host "Hello, $myName!" Write-Host "There are $processCount processes running."
通配符
PowerShell 支持标准的通配符来匹配文件名或字符串:
- 匹配零个或多个字符。
- 匹配单个字符。
[]:匹配指定范围内的字符([a-c])。
示例:
Get-ChildItem *.txt:获取所有.txt文件。Get-Process s*:获取所有以 "s" 开头的进程。
第三部分:常用核心命令
这里是一些最常用的命令,掌握它们你就能完成大部分日常任务。
| 命令 | 别名 | 功能描述 |
|---|---|---|
Get-ChildItem |
ls, dir |
获取目录中的项(文件和文件夹)。 |
Set-Location |
cd |
更改当前工作目录。 |
Get-Location |
pwd |
获取当前工作路径。 |
New-Item |
ni |
创建新文件或新文件夹。 |
Remove-Item |
del, rm |
删除文件或文件夹。 |
Copy-Item |
copy, cp |
复制文件或文件夹。 |
Rename-Item |
ren |
重命名文件或文件夹。 |
Get-Content |
cat, type |
读取文件内容。 |
Out-File |
将命令输出写入到文件中。 | |
Select-Object |
select |
从对象中选择指定的属性。 |
Where-Object |
where |
根据条件筛选对象。 |
Sort-Object |
sort |
对对象进行排序。 |
Measure-Object |
measure |
计算对象的数值属性(如总和、平均值、计数)。 |
ForEach-Object |
foreach |
对管道中的每个对象执行操作。 |
第四部分:实战演练
让我们通过几个例子来感受一下 PowerShell 的强大。
练习 1:查找并清理大文件
假设你想在 C:\Users 目录下查找所有超过 100MB 的 .log 文件,并列出它们的详细信息。
# 1. 进入目标目录
Set-Location C:\Users
# 2. 查找所有.log文件,筛选出大小大于100MB的(100MB = 100 * 1024 * 1024 字节)
# -Path "*.log" 指定查找.log文件
# -Recurse 递归查找所有子目录
# -Filter "Length -gt 100MB" 筛选条件
Get-ChildItem -Path "*.log" -Recurse -Filter { $_.Length -gt 100MB }
# 3. 将结果保存到一个文件中,方便查看
Get-ChildItem -Path "*.log" -Recurse -Filter { $_.Length -gt 100MB } | Out-File -FilePath C:\Temp\LargeLogFiles.txt
练习 2:管理 Windows 服务
假设你想找出所有正在运行的 "Microsoft" 相关的服务,并停止它们。
# 1. 获取所有服务
# 2. 筛选出状态为 "Running" 且 DisplayName 包含 "Microsoft" 的服务
# 3. 停止这些服务
Get-Service | Where-Object { $_.Status -eq 'Running' -and $_.DisplayName -like '*Microsoft*' } | Stop-Service
注意:执行 Stop-Service 需要管理员权限,右键点击 PowerShell 窗口,选择“以管理员身份运行”。
第五部分:编写你的第一个脚本
脚本是一系列保存在 .ps1 文件中的 PowerShell 命令。
- 创建脚本文件:在记事本或其他代码编辑器中输入以下内容。
- 保存文件:将其保存为
HelloScript.ps1。
# 这是一个简单的 PowerShell 脚本 Write-Host "Hello from PowerShell Script!" Write-Host "The current date and time is: $(Get-Date)" # 获取并显示前5个进程 Write-Host "Here are the first 5 processes:" Get-Process | Select-Object -First 5 | Format-Table Name, Id, CPU -AutoSize
- 执行脚本:
- 在 PowerShell 窗口中,使用
cd命令进入你保存脚本的目录。 - 然后输入
.\HelloScript.ps1并回车。
- 在 PowerShell 窗口中,使用
可能会遇到的问题:默认情况下, PowerShell 的执行策略是 Restricted(受限),不允许运行脚本,你需要更改它。
- 以管理员身份运行 PowerShell。
- 执行以下命令来更改策略(
RemoteSigned是一个常用的策略,允许本地脚本运行):Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
- 系统会提示你确认,输入
Y并回车。
再次尝试运行你的脚本,它应该就能正常工作了。
第六部分:进阶学习资源
当你掌握了基础后,可以探索以下更高级的主题和资源:
- ISE 和 VS Code:使用集成开发环境来编写和调试脚本,Visual Studio Code 配合 PowerShell 扩展是目前最流行的选择。
- 远程管理:学习使用
Enter-PSSession和Invoke-Command在远程计算机上执行命令。 - Desired State Configuration (DSC):一种强大的配置管理工具,用于自动化服务器的部署和配置。
- PowerShell 7+:了解最新版本的 PowerShell,它带来了更多跨平台改进和性能提升。
推荐资源:
- Microsoft 官方文档:PowerShell 文档 - 最权威、最全面的资料。
- Learn PowerShell in a Month of Lunches:一本非常经典的入门书籍。
- The PoshGram 博客:由 PowerShell 团队成员撰写,内容深入。
- YouTube 频道:搜索 "PowerShell" 或 "Jeff Hicks",有很多优秀的视频教程。
PowerShell 是一个工具,熟能生巧,不要害怕尝试,多用 Get-Help,多写小脚本,多使用管道来组合命令,很快你就会发现,曾经需要手动重复几十次的操作,现在只需要一行简单的 PowerShell 命令就能完成,祝你学习愉快!
