系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

Get-Content

按行读取文本和日志,-Raw 读成单个字符串,-Wait 跟踪追加。

补充说明

Get-Content 逐行读取文本文件,默认每行输出一个 System.String,因此可以直接接 Select-String、ForEach-Object;加 -Raw 后整份文件作为一个字符串输出,适合交给 ConvertFrom-Json 或正则整体匹配。别名是 gc、cat、type。常用参数还有 -TotalCount(别名 -First)、-Tail、-Wait、-Encoding、-ReadCount。

管道:-Path 可按属性名接收字符串路径,内容以字符串形式流向后续命令。权限:读取文件需要 FILE_READ_DATA,受 ACL 和共享锁影响;用 -Wait 时会保持文件句柄,日志轮转或删除文件可能导致读取中断。

版本与编码:5.1 默认按 BOM 判断编码,无 BOM 时按系统 ANSI 代码页读取;7.x 默认 UTF-8(无 BOM)。5.1 用 -Encoding Byte 读二进制,7.x 改为 -AsByteStream。-Raw 两版都有。

常用示例

# 1. 跟踪日志末尾,等价于 tail -f;Ctrl+C 退出
PS C:\> Get-Content C:\Logs\app.log -Tail 20 -Wait

# 2. 只读前 50 行并筛出错误,避免把大文件全部载入
PS C:\> Get-Content C:\Logs\app.log -TotalCount 50 | Select-String -Pattern 'ERROR|WARN'

# 3. 读 JSON 必须加 -Raw,否则每一行都单独解析
PS C:\> $cfg = Get-Content C:\App\config.json -Raw | ConvertFrom-Json; $cfg.Port

# 4. 指定编码读取遗留文件,排除乱码来源
PS C:\> Get-Content C:\Data\legacy.txt -Encoding UTF8 -TotalCount 3

# 5. 统计行数;大文件要注意内存占用
PS C:\> (Get-Content C:\Logs\app.log).Count

# 6. 7.x 差异:读取二进制前 4 字节;5.1 用 -Encoding Byte
PS C:\> Get-Content C:\Temp\data.bin -AsByteStream -TotalCount 4

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 为什么 Get-Content config.json | ConvertFrom-Json 经常失败,而加 -Raw 就正常?
  2. 5.1 和 7.x 在没有 BOM 的文本文件上默认按什么编码读取?
  3. -Wait 跟 -Tail 分别解决什么问题?长期跟踪有什么副作用?
答案
  1. 不加 -Raw 时每行是独立字符串,ConvertFrom-Json 逐行收到不完整 JSON;-Raw 把整份文件作为一个字符串。
  2. 5.1 按系统 ANSI 代码页,7.x 按 UTF-8(无 BOM);跨版本要显式 -Encoding。
  3. -Tail N 只取末尾 N 行;-Wait 持续等待追加。副作用是保持文件句柄、不会自行退出,日志轮转后可能失效。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令