以下是针对初学者到中高级的 PowerShell 教程(基于 Windows PowerShell 5.1 和 PowerShell 7.x 通用内容),从零基础开始,逐步进阶。
1. PowerShell 是什么?
PowerShell 是微软开发的强大命令行壳和脚本语言,专为系统管理设计。
- 基于 .NET Framework / .NET Core
- 一切都是对象(而不是纯文本)
- 支持管道(|)、模块、脚本、远程管理等
2. 如何打开 PowerShell
- Windows 键 + X → Windows Terminal(推荐)或 Windows PowerShell(管理员)
- Win + R → 输入 powershell 或 pwsh(PowerShell 7)
- 以管理员身份运行:右键 → 以管理员身份运行
3. 基础命令(必掌握前 10 个)
| 命令 | 说明 | 示例 |
|---|---|---|
| Get-Command | 查看所有可用命令 | Get-Command |
| Get-Help | 查看帮助(超级重要!) | Get-Help Get-Process -Detailed |
| Get-Alias | 查看别名(如 dir → Get-ChildItem) | Get-Alias |
| Clear-Host 或 cls | 清屏 | cls |
| Get-Location 或 pwd | 显示当前路径 | pwd |
| Set-Location 或 cd | 切换目录 | cd C:\Windows |
| Get-ChildItem 或 dir | 列出文件和文件夹 | dir -Recurse *.log |
| Get-Process 或 ps | 查看进程 | Get-Process |
| Get-Service | 查看服务 | Get-Service wuauserv |
| Update-Help | 下载最新帮助(首次建议执行) | Update-Help -Force |
4. 核心概念:管道(Pipeline)和对象
# 传统 cmd 是文本
dir | findstr ".txt"
# PowerShell 是对象!可以直接操作属性
Get-Process | Where-Object {$_.CPU -gt 500} | Sort-Object CPU -Descending | Select-Object -First 5
常用管道 cmdlet:
- Where-Object → 过滤(别名 ?)
- Select-Object → 选择属性(别名 select)
- Sort-Object → 排序
- ForEach-Object → 循环处理(别名 %)
- Group-Object → 分组
5. 常用实用命令集合
# 查看 IP 配置
Get-NetIPAddress | Format-Table
# 查看磁盘使用情况
Get-Disk
Get-Partition
Get-Volume
Get-PSDrive
# 查看事件日志(最近 10 条错误)
Get-EventLog System -Newest 10 -EntryType Error
# 或 PowerShell 7 推荐写法
Get-WinEvent -LogName System -MaxEvents 10 | Where-Object LevelDisplayName -eq "Error"
# 杀进程
Stop-Process -Name notepad -Force
# 重启电脑
Restart-Computer -Force
# 查看 Windows 激活状态
Get-CimInstance SoftwareLicensingProduct | Where-Object Name -like "Windows*" | Select Name, LicenseStatus
6. 变量与数据类型
$name = "张三"
$age = 25
$isAdmin = $true
$files = Get-ChildItem C:\
# 数组
$array = 1,2,3,4,5
$array = @(1,2,3,4,5) # 强制数组
# 哈希表(字典)
$hash = @{
Name = "李四"
Age = 30
City = "北京"
}
$hash.Name # 输出 李四
7. 条件与循环
# if
if ($age -gt 18) { Write-Output "成年" } else { Write-Output "未成年" }
# switch
switch ($env:USERDOMAIN) {
"WORKGROUP" { "个人电脑" }
"CORP" { "公司电脑" }
default { "未知" }
}
# for
for ($i=1; $i -le 10; $i++) { Write-Output $i }
# foreach
$services = Get-Service
foreach ($s in $services) {
if ($s.Status -eq "Stopped") { $s.Start() }
}
# PowerShell 风格 foreach
Get-Process | ForEach-Object { "$($_.Name) 使用内存 $($_.WS /1MB) MB" }
8. 函数(Functions)
function Get-DiskUsage {
param(
[string]$Path = "C:\"
)
$size = (Get-ChildItem $Path -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum /1GB
Write-Output "总大小: $($size.ToString("F2")) GB"
}
# 调用
Get-DiskUsage -Path D:\
9. 脚本基础 (.ps1 文件)
- 新建文件 test.ps1
# test.ps1
Write-Host "Hello PowerShell!" -ForegroundColor Green
$computers = "PC01","PC02","PC03"
foreach ($pc in $computers) {
if (Test-Connection $pc -Count 1 -Quiet) {
Write-Host "$pc 在线" -ForegroundColor Green
} else {
Write-Host "$pc 离线" -ForegroundColor Red
}
}
- 执行脚本(可能需要修改执行策略)
# 查看当前执行策略
Get-ExecutionPolicy
# 设置允许运行本地脚本(推荐 RemoteSigned)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
# 执行脚本
.\test.ps1
10. 模块管理(PowerShell 7 推荐)
# 查看已安装模块
Get-Module -ListAvailable
# 安装模块(需要管理员或用户权限)
Install-Module -Name Microsoft.PowerShell.SecretManagement -Scope CurrentUser
# 常用模块推荐
Install-Module -Name PSWindowsUpdate # Windows 更新
Install-Module -Name ImportExcel # 操作 Excel(无需安装 Office)
Install-Module -Name Posh-SSH # SSH 操作
11. 推荐学习资源
- 官方文档(中文):https://learn.microsoft.com/zh-cn/powershell/
- PowerShell 7 下载:https://github.com/PowerShell/PowerShell/releases
- 书籍:《PowerShell 实战指南(第2版)》、《Learn PowerShell in a Month of Lunches》
- 视频:B站搜索 “PowerShell 零基础” 或 “老夏PowerShell”
12. 每日练习建议(30天进阶计划)
第1-5天:熟悉基本命令、管道、Get-Help
第6-10天:变量、条件、循环、函数
第11-15天:写简单脚本(批量改文件名、重命名电脑、清理垃圾文件)
第16-20天:学习模块、远程管理(Invoke-Command)
第21-30天:写复杂自动化脚本(监控磁盘、自动备份、生成报告)
需要我给你一份完整的 30天学习计划 + 每日小项目 吗?或者你现在想针对某个具体场景(比如批量改文件、系统运维、Active Directory)深入学习?随时告诉我!