PowerShell 文件操作:Get-Content、Set-Content
Get-Content 负责读取文件内容,Set-Content 负责写入或覆盖文件内容。两者配合管道符可快速完成日志提取、配置替换与批量数据处理。
一、 读取文件:Get-Content 精准提取
- 打开 PowerShell 终端。通过 Windows 开始菜单或运行对话框启动命令行环境。
- 定位目标文件路径。使用
cd命令切换工作目录,或直接使用完整路径指向待处理文件。 - 执行基础读取命令。输入完整指令,系统会逐行输出文件内的全部文本:
Get-Content -Path ".\log.txt" - 限制读取行数。文件体积较大时,使用
-TotalCount参数仅提取前 N 行。输入指令即可快速查看头部配置:Get-Content -Path ".\config.ini" -TotalCount 10 - 抓取末尾数据。排查线上问题通常只需最新记录。使用
-Tail参数反向提取,直接显示最后五十行:Get-Content -Path ".\app.log" -Tail 50 - 修正乱码显示。输出结果若为乱码,说明系统默认编码与文件不匹配。追加
-Encoding UTF8参数强制按对应字符集解析文本。
二、 写入文件:Set-Content 覆盖生成
- 准备待写入的数据。数据可以是纯文本字符串、已赋值的变量,或前序命令的输出结果。
- 执行覆盖写入。输入完整指令,命令会直接清空原文件内容(若文件不存在则自动新建)并填入指定数据:
Set-Content -Path ".\new_report.txt" -Value "系统巡检完成" - 批量写入多行。PowerShell 会自动将数组的每个元素输出为独立行。执行脚本即可生成三行状态记录:
$data = "服务器A: 正常", "服务器B: 告警", "服务器C: 离线" Set-Content -Path ".\status.txt" -Value $data - 统一输出编码。指定
-Encoding UTF8或-Encoding Default参数,确保生成的文本文件符合下游程序的读取规范。
三、 常用参数速查
| 参数名称 | 适用命令 | 核心作用 |
|---|---|---|
-Path |
两者通用 | 指定文件或文件夹的完整路径 |
-TotalCount |
仅 Get-Content |
仅读取前 N 行,跳过后续内容以节省内存 |
-Tail |
仅 Get-Content |
仅读取末尾 N 行,快速追踪最新动态 |
-Value |
仅 Set-Content |
指定需要写入的具体文本或数据对象 |
-Encoding |
两者通用 | 定义文本字符集(如 UTF8、Unicode) |
四、 组合实战:管道符高效处理
管道(Pipe,符号为 |)负责将左侧命令的输出结果,直接作为右侧命令的输入源,免去临时文件的读写开销。
- 替换文件内的指定文本。结合读取命令与字符串替换逻辑,直接重写文件。系统逐行扫描旧文件,替换匹配词汇后直接写入新文件:
Get-Content -Path ".\old.txt" | ForEach-Object { $_ -replace "旧IP", "新IP" } | Set-Content -Path ".\new.txt" -Encoding UTF8 ``` 2. **筛选**关键日志并独立保存。使用 `Where-Object`(可简写为 `?`)过滤包含特定关键字的行。输入指令即可精准提取所有错误行: ```powershell Get-Content -Path ".\server.log" -Encoding UTF8 | Where-Object { $_ -match "Error" } | Set-Content -Path ".\errors.log" - 追加数据至文件末尾。默认情况下
Set-Content会擦除原有全部内容。若需保留历史数据并在末尾新增内容,切换至Add-Content命令。该命令的语法结构与写入命令完全一致,仅修改动词即可生效。
五、 避坑指南:性能与内存边界
- 评估文件体积。
Get-Content默认将完整文件一次性载入运行内存。处理超过两 GB 的巨型日志时,可能触发内存溢出错误(Out of Memory)。超大文件改用Select-String命令或调用底层.NET的StreamReader对象进行流式读取。 - 释放文件锁。多个进程同时读写同一文件时,终端会抛出“进程正在使用此文件”的异常。添加
-ReadCount参数分块处理(例如Get-Content -Path ".\huge.csv" -ReadCount 1000),按批次读取可大幅降低文件锁定冲突。 - 包裹特殊路径。路径字符串中包含空格、中文字符或特殊符号(如
&、#)时,必须使用英文双引号""或单引号''将完整路径括起来,否则解释器会截断命令并抛出参数解析错误。

暂无评论,快来抢沙发吧!