PowerShell 是微软打造的新一代现代化命令行工具,采用面向对象的命令体系,功能强大且支持自动化脚本编写。
目录
- PowerShell 简介
- PowerShell 快捷键
- 核心概念
- 常用 Cmdlet
- 管道与对象操作
- 文件与目录操作
- 网络相关命令
- 系统管理命令
- 脚本编写
1. PowerShell 简介
打开方式
flowchart LR
A[打开 PowerShell] --> B[Win + R 输入 powershell]
A --> C[开始菜单搜索]
A --> D[文件资源管理器地址栏]
A --> E[右键菜单]
B --> B1[普通模式]
B --> B2[管理员模式 Shift+Ctrl+回车]
C --> C1[搜索 PowerShell]
D --> D1[地址栏输入 powershell]
E --> E1[Shift + 右键 在此处打开窗口]
与 CMD 的区别
| 特性 |
CMD |
PowerShell |
| 命令格式 |
字符串命令 |
动词-名词 Cmdlet |
| 输出内容 |
文本 |
.NET 对象 |
| 管道传输 |
文本流 |
对象流 |
| 别名系统 |
有限 |
丰富完整 |
| 脚本扩展名 |
.bat / .cmd |
.ps1 |
| Tab 补全 |
基础 |
智能感知 |
别名示例
PowerShell 为常用命令提供了 Unix 风格的别名:
| 别名 |
实际命令 |
说明 |
ls |
Get-ChildItem |
列出目录 |
dir |
Get-ChildItem |
列出目录 |
cd |
Set-Location |
切换目录 |
cat |
Get-Content |
读取文件 |
rm |
Remove-Item |
删除 |
cp |
Copy-Item |
复制 |
mv |
Move-Item |
移动 |
ps |
Get-Process |
进程 |
kill |
Stop-Process |
结束进程 |
which |
Get-Command |
查找命令 |
2. PowerShell 快捷键
2.1 光标移动
mindmap
root((光标移动))
行内移动
Home 移动到行首
End 移动到行尾
Ctrl + Home 缓冲区开头
Ctrl + End 缓冲区末尾
Ctrl + ← 左移一个单词
Ctrl + → 右移一个单词
Emacs 风格
Alt + B 向后移动单词
Alt + F 向前移动单词
Ctrl + A 行首
Ctrl + E 行尾
删除操作
Backspace 删除光标前字符
Delete 删除光标后字符
Ctrl + H 删除光标前字符
Ctrl + U 删除光标前所有内容
Ctrl + K 删除光标后所有内容
Alt + D 删除光标到单词末尾
Alt + Backspace 删除光标到单词开头
| 快捷键 |
功能 |
Home |
移动到行首 |
End |
移动到行尾 |
Ctrl + Home |
移动到缓冲区开头 |
Ctrl + End |
移动到缓冲区末尾 |
Ctrl + ← |
向左移动一个单词 |
Ctrl + → |
向右移动一个单词 |
Alt + B |
向后移动一个单词(Emacs 风格) |
Alt + F |
向前移动一个单词(Emacs 风格) |
2.2 文本编辑
| 快捷键 |
功能 |
Ctrl + C |
复制选中文本 / 取消当前命令 |
Ctrl + V |
粘贴 |
Ctrl + Z |
撤销 |
Ctrl + X |
剪切 |
Ctrl + Y |
恢复删除(Yank) |
Ctrl + _ |
撤销操作 |
Alt + . |
插入上一条命令的最后一个参数 |
2.3 命令历史与补全
flowchart TD
A[命令历史与补全] --> B[历史记录]
A --> C[自动补全]
A --> D[搜索]
B --> B1[↑ 上一条命令]
B --> B2[↓ 下一条命令]
B --> B3[Ctrl + P 上一条]
B --> B4[Ctrl + N 下一条]
C --> C1[Tab 补全]
C --> C2[Tab Tab 循环选项]
C --> C3[Ctrl + Space 菜单补全]
C --> C4[Ctrl + Shift + Space 参数补全]
D --> D1[Ctrl + R 反向搜索]
D --> D2[Ctrl + S 正向搜索]
| 快捷键 |
功能 |
↑ |
上一条命令 |
↓ |
下一条命令 |
Tab |
自动补全 |
Shift + Tab |
反向自动补全 |
Ctrl + Space |
显示补全菜单 |
Ctrl + R |
反向搜索历史 |
Ctrl + S |
正向搜索历史 |
Ctrl + L |
清屏 |
2.4 特殊编辑操作
| 快捷键 |
功能 |
Ctrl + X, Ctrl + E |
在编辑器中编辑命令 |
Alt + D |
删除从光标到单词末尾(Emacs 风格) |
Alt + Backspace |
删除从光标到单词开头(Emacs 风格) |
3. 核心概念
3.1 Cmdlet 命名规范
PowerShell 命令采用「动词-名词」格式的 Cmdlet 命名规范:
flowchart LR
A[Verb-Noun] --> B[Verb 动词]
A --> C[Noun 名词]
B --> B1[Get 获取]
B --> B2[Set 设置]
B --> B3[New 新建]
B --> B4[Remove 删除]
B --> B5[Start 启动]
B --> B6[Stop 停止]
B --> B7[Copy 复制]
B --> B8[Move 移动]
C --> C1[Process 进程]
C --> C2[Service 服务]
C --> C3[Item 项目]
C --> C4[Location 位置]
C --> C5[Content 内容]
3.2 管道与对象
flowchart TB
A[PowerShell 管道] --> B[Get-Process]
A --> C[Where-Object]
A --> D[Sort-Object]
A --> E[Select-Object]
A --> F[输出]
B --> |输出对象| C
C --> |筛选对象| D
D --> |排序对象| E
E --> |选择属性| F
F --> F1[格式化输出]
F --> F2[导出文件]
F --> F3[传递下一命令]
3.3 帮助系统
| 命令 |
功能 |
示例 |
Get-Help |
显示帮助 |
Get-Help Get-Process |
help |
分页显示帮助 |
help Get-Process |
Get-Command |
查找命令 |
Get-Command -Verb Get |
Get-Alias |
查看别名 |
Get-Alias ls |
Show-Command |
图形化命令查找 |
- |
4. 常用 Cmdlet
4.1 文件与目录
| Cmdlet |
别名 |
功能 |
Get-ChildItem |
ls, dir, gci |
列出目录内容 |
Set-Location |
cd, sl, chdir |
切换目录 |
Get-Content |
cat, gc |
读取文件内容 |
Set-Content |
sc |
写入文件内容 |
Add-Content |
ac |
追加文件内容 |
Copy-Item |
cp, copy, cpi |
复制 |
Move-Item |
mv, move, mi |
移动/重命名 |
Remove-Item |
rm, del, ri |
删除 |
New-Item |
ni |
新建文件/目录 |
Test-Path |
tp |
测试路径是否存在 |
4.2 进程与服务
| Cmdlet |
别名 |
功能 |
Get-Process |
ps, gps |
获取进程 |
Stop-Process |
kill, spps |
停止进程 |
Start-Process |
saps, start |
启动进程 |
Get-Service |
gsv |
获取服务 |
Start-Service |
sass |
启动服务 |
Stop-Service |
spss |
停止服务 |
Restart-Service |
rsv |
重启服务 |
4.3 系统信息
| Cmdlet |
功能 |
Get-ComputerInfo |
获取系统信息 |
Get-EventLog |
获取事件日志 |
Get-Service |
获取服务 |
Get-HotFix |
获取修补程序 |
Get-Process |
获取进程 |
Get-EventLog |
获取事件日志 |
4.4 网络相关
| Cmdlet |
功能 |
Test-Connection |
测试网络连接(类似 ping) |
Resolve-DnsName |
DNS 查询 |
Get-NetIPAddress |
获取 IP 地址 |
Get-NetTCPConnection |
获取 TCP 连接 |
Test-NetConnection |
网络诊断 |
4.5 对象操作
| Cmdlet |
别名 |
功能 |
Where-Object |
?, where |
筛选对象 |
Select-Object |
select |
选择属性 |
ForEach-Object |
%, foreach |
遍历对象 |
Sort-Object |
sort |
排序 |
Measure-Object |
measure |
统计 |
Group-Object |
group |
分组 |
Tee-Object |
tee |
分流输出 |
Format-List |
fl |
列表格式 |
Format-Table |
ft |
表格格式 |
5. 管道与对象操作
5.1 基本语法
# PowerShell 管道示例
Get-Process | Where-Object {$_.CPU -gt 100} | Sort-Object CPU -Descending | Select-Object -First 10
flowchart LR
A[Get-Process] --> B[Where-Object CPU>100]
B --> C[Sort-Object CPU 降序]
C --> D[Select-Object 前10]
D --> E[输出结果]
5.2 筛选与排序
# 筛选进程
Get-Process | Where-Object {$_.ProcessName -like "chrome*"}
# 选择特定属性
Get-Process | Select-Object Name, CPU, WorkingSet
# 排序
Get-Process | Sort-Object CPU -Descending
# 分组
Get-Process | Group-Object ProcessName
5.3 统计与计算
# 统计文件大小
Get-ChildItem -Recurse | Measure-Object -Property Length -Sum -Average
# 统计数量
Get-Process | Measure-Object
# 计算
Get-ChildItem | Measure-Object -Property Length -Sum
5.4 导出与转换
# 导出到 CSV
Get-Process | Export-Csv processes.csv
# 导出到 JSON
Get-Process | Select-Object -First 5 | ConvertTo-Json
# 导入 CSV
Import-Csv processes.csv
# 转换对象
Get-Process | Select-Object Name, Id | ConvertTo-Json
6. 文件与目录操作
6.1 目录导航
flowchart TD
A[目录导航] --> B[cd 切换目录]
A --> C[ls 列出内容]
A --> D[mkdir 创建目录]
A --> E[rmdir 删除目录]
B --> B1[cd .. 上级目录]
B --> B2[cd \ 根目录]
B --> B3[cd ~ 用户目录]
B --> B4[cd - 返回之前目录]
B --> B5[D: 切换盘符]
| 命令 |
功能 |
示例 |
cd 或 Set-Location |
切换目录 |
cd Documents |
cd .. |
返回上级目录 |
- |
cd \ |
返回根目录 |
- |
cd ~ |
返回用户目录 |
- |
cd - |
返回之前目录 |
PowerShell 特有 |
D: |
切换到 D 盘 |
- |
ls 或 dir |
列出目录 |
ls -Force |
6.2 文件操作
| 命令 |
功能 |
示例 |
cat 或 Get-Content |
显示文件内容 |
cat file.txt |
ls 或 Get-ChildItem |
列出文件 |
ls -Recurse |
cp 或 Copy-Item |
复制文件 |
cp file.txt D:\backup\ |
mv 或 Move-Item |
移动文件 |
mv old.txt new.txt |
rm 或 Remove-Item |
删除文件 |
rm file.txt |
echo 或 Set-Content |
写入文件 |
echo hello > file.txt |
6.3 通配符与过滤
# 递归列出所有文件
Get-ChildItem -Recurse -File
# 查找大文件(>100MB)
Get-ChildItem -Recurse -File | Where-Object {$_.Length -gt 100MB}
# 按扩展名筛选
Get-ChildItem -Filter *.txt
# 排除隐藏文件
Get-ChildItem -Force | Where-Object {$_.PSIsContainer -eq $false}
7. 网络相关命令
7.1 网络诊断
flowchart LR
A[网络命令] --> B[Test-Connection]
A --> C[Resolve-DnsName]
A --> D[Get-NetIPAddress]
A --> E[Test-NetConnection]
B --> B1[类似 ping]
C --> C1[DNS查询]
D --> D1[IP配置]
E --> E1[端口测试]
| 命令 |
功能 |
示例 |
Test-Connection |
测试连通性 |
Test-Connection google.com |
Resolve-DnsName |
DNS 查询 |
Resolve-DnsName google.com |
Get-NetIPAddress |
查看 IP |
Get-NetIPAddress |
Get-NetTCPConnection |
查看连接 |
Get-NetTCPConnection -State Established |
Test-NetConnection |
网络诊断 |
Test-NetConnection google.com -Port 443 |
7.2 命令示例
# ping 测试
Test-Connection -ComputerName google.com -Count 4
# DNS 查询
Resolve-DnsName gmail.com -Type MX
# 查看网络配置
Get-NetIPAddress | Where-Object {$_.AddressFamily -eq 'IPv4'}
# 测试端口
Test-NetConnection -ComputerName google.com -Port 443
# 查看网络连接
Get-NetTCPConnection | Where-Object {$_.State -eq 'Established'} | Select-Object OwningProcess
8. 系统管理命令
8.1 进程管理
flowchart TD
A[进程管理] --> B[Get-Process]
A --> C[Stop-Process]
A --> D[Start-Process]
A --> E[Wait-Process]
B --> B1[ps 查看进程]
B --> B2[Sort-Object 排序]
B --> B3[Where-Object 筛选]
C --> C1[kill 结束进程]
C --> C2["/f 强制结束"]
C --> C3["/im 按名称"]
| 命令 |
功能 |
示例 |
Get-Process 或 ps |
查看进程 |
ps chrome |
Stop-Process 或 kill |
结束进程 |
kill notepad |
Start-Process 或 start |
启动进程 |
start notepad |
Stop-Process -Name notepad -Force |
强制结束 |
- |
8.2 服务管理
| 命令 |
功能 |
示例 |
Get-Service |
获取服务 |
Get-Service |
Start-Service |
启动服务 |
Start-Service Spooler |
Stop-Service |
停止服务 |
Stop-Service Spooler |
Restart-Service |
重启服务 |
Restart-Service Spooler |
Set-Service |
设置服务 |
Set-Service -Name -Status Running |
8.3 系统工具
| 命令 |
打开 |
说明 |
control |
控制面板 |
- |
appwiz.cpl |
程序和功能 |
卸载程序 |
msconfig |
系统配置 |
启动项管理 |
regedit |
注册表编辑器 |
- |
taskmgr |
任务管理器 |
- |
diskmgmt.msc |
磁盘管理 |
- |
devmgmt.msc |
设备管理器 |
- |
eventvwr |
事件查看器 |
- |
cleanmgr |
磁盘清理 |
- |
perfmon |
性能监视器 |
- |
resmon |
资源监视器 |
- |
9. 脚本编写
9.1 执行策略
# 查看当前执行策略
Get-ExecutionPolicy
# 可选策略:
# - Restricted: 不允许运行脚本(默认)
# - AllSigned: 只能运行签名脚本
# - RemoteSigned: 本地脚本可运行,远程脚本需签名
# - Unrestricted: 允许所有脚本
# - Bypass: 不阻止任何操作
# 设置执行策略(需要管理员权限)
Set-ExecutionPolicy RemoteSigned
9.2 脚本示例
# PowerShell 脚本示例
# 设置编码为 UTF-8
$OutputEncoding = [System.Text.Encoding]::UTF8
# 获取系统信息
$computerInfo = @{
'计算机名' = $env:COMPUTERNAME
'用户名' = $env:USERNAME
'操作系统' = (Get-CimInstance Win32_OperatingSystem).Caption
'内存(GB)' = [math]::Round((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB, 2)
'磁盘空间' = Get-CimInstance Win32_LogicalDisk | Where-Object {$_.DeviceID -eq 'C:'} |
Select-Object @{N='已用(GB)';E={[math]::Round(($_.Size - $_.FreeSpace) / 1GB, 2)}},
@{N='可用(GB)';E={[math]::Round($_.FreeSpace / 1GB, 2)}}
}
# 输出为表格
$computerInfo | Format-List
9.3 变量与运算
# 变量
$name = "World"
$count = 10
# 数组
$array = @(1, 2, 3, 4, 5)
# 哈希表
$hash = @{
Name = "Test"
Value = 100
}
# 条件判断
if ($count -gt 5) {
Write-Host "大于5"
} elseif ($count -eq 5) {
Write-Host "等于5"
} else {
Write-Host "小于5"
}
# 循环
foreach ($item in $array) {
Write-Host $item
}
# ForEach-Object 方法
$array | ForEach-Object { $_ * 2 }
附录:PowerShell 快捷键速查
| 快捷键 |
功能 |
Ctrl + L |
清屏 |
Ctrl + A |
全选 / 移动到行首 |
Ctrl + E |
移动到行尾 |
Ctrl + R |
搜索历史 |
Ctrl + Y |
恢复删除 |
Ctrl + _ |
撤销 |
Alt + . |
插入上条命令最后一个参数 |
Ctrl + Space |
显示补全菜单 |
Alt + B |
向后移动单词 |
Alt + F |
向前移动单词 |
Alt + D |
删除到单词末尾 |
Ctrl + X, Ctrl + E |
在编辑器中编辑 |
最后更新:2026年4月