Get-Content 是什么
Get-Content 用来读取文本文件的内容,默认按行返回字符串数组,每一行是一个独立的字符串对象,因此可以直接过滤、计数、按行号取用。它有两个和日志查看高度相关的参数:指定尾部行数相当于只取末尾部分,加等待参数后文件一旦被追加就会把新行继续输出,效果类似实时跟踪。读配置文件、抽样看日志、把内容交给匹配命令筛选关键字,都是它的常见用途。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 及以上 |
|---|---|
| 语法 | Get-Content [-Path] <文件> [-TotalCount n] [-Tail n] [-Wait] [-Encoding <编码>] [-Raw] |
| 别名 | cat、type、gc |
| 尾巴读取 | 参数写法在不同版本略有差异,老版本用总行数配合倒数,新版本有专门的尾部参数 |
| 实时跟踪 | 等待参数会在文件被追加时继续输出,需手工中断 |
| 编码 | 默认按系统编码读取,读 UTF-8 文件要显式指定,否则中文会乱码 |
典型使用场景
- 抽样查看日志:只读末尾若干行,避免把几百兆文件整读进内存
- 实时跟踪输出:等待追加内容,观察程序运行过程或排查启动失败
- 关键字筛选:把内容交给匹配命令,挑出含错误信息的行
- 读取配置:按行读取配置文件并用正则提取键值
- 统计行数:配合度量命令得到行数、字数等指标
- 与编码显式搭配,避免中文内容出现乱码
常用示例
常用示例
# 读取末尾 50 行,日志查看最常用
Get-Content D:\Logs\app.log -Tail 50
# 实时跟踪末尾内容,Ctrl+C 结束
Get-Content D:\Logs\app.log -Wait -Tail 10
# 筛选包含关键字的行
Get-Content D:\Logs\app.log | Select-String -Pattern ERROR
# 指定编码读取 UTF-8 文件,避免乱码
Get-Content D:\cfg\app.ini -Encoding UTF8
# 统计文件行数
(Get-Content D:\Logs\app.log | Measure-Object -Line).Lines
# 整块读取为单个字符串,适合正则整体匹配
Get-Content D:\cfg\app.json -Raw常用参数速查
| 参数 | 作用 | 注意点 |
|---|---|---|
| -Tail n | 只取末尾 n 行 | 大文件场景的首选,读取快且省内存 |
| -TotalCount n | 取最前面 n 行 | 适合看文件头部格式 |
| -Wait | 文件被追加时继续输出 | 会占住当前会话,计划任务中不要使用 |
| -Encoding | 指定字符编码 | 读取跨平台文件时必须显式指定 |
| -Raw | 整块读成单个字符串 | 正则整体匹配时用,超大文件会吃内存 |
| -ReadCount | 指定一次读入的行数 | 影响管道传递的批次大小,可微调性能 |
读取大文件时不要整读再过滤:先用尾部参数或匹配命令收窄范围,整读几百兆日志会消耗大量内存,也会让后续处理变慢。
实时跟踪会持续占用一个会话且不会自行退出,放进计划任务会导致任务永远不结束;需要长时间采集应改用定时读取新行或专门的日志采集方式。