PowerShell 教程

PowerShell 是微软打造的新一代现代化命令行工具,采用面向对象的命令体系,功能强大且支持自动化脚本编写。


目录

  1. PowerShell 简介
  2. PowerShell 快捷键
  3. 核心概念
  4. 常用 Cmdlet
  5. 管道与对象操作
  6. 文件与目录操作
  7. 网络相关命令
  8. 系统管理命令
  9. 脚本编写

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: 切换盘符]
命令 功能 示例
cdSet-Location 切换目录 cd Documents
cd .. 返回上级目录 -
cd \ 返回根目录 -
cd ~ 返回用户目录 -
cd - 返回之前目录 PowerShell 特有
D: 切换到 D 盘 -
lsdir 列出目录 ls -Force

6.2 文件操作

命令 功能 示例
catGet-Content 显示文件内容 cat file.txt
lsGet-ChildItem 列出文件 ls -Recurse
cpCopy-Item 复制文件 cp file.txt D:\backup\
mvMove-Item 移动文件 mv old.txt new.txt
rmRemove-Item 删除文件 rm file.txt
echoSet-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-Processps 查看进程 ps chrome
Stop-Processkill 结束进程 kill notepad
Start-Processstart 启动进程 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月

posted @ 2026-05-12 11:29  RK5123153  阅读(10)  评论(0)    收藏  举报