CSV 导入导出
Export-Csv 把对象按属性导出成 CSV,Import-Csv 再把它读回对象数组,是跨系统交换数据最通用的格式。导出时列名来自对象属性,导入后所有值都按字符串读取,做数值或时间比较前需要显式转换类型。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 |
|---|---|
| 语法 | <对象> | Export-Csv 文件 -NoTypeInformation -Encoding UTF8;Import-Csv 文件 | 后续命令 |
| 关键开关 | -NoTypeInformation 去掉首行类型注释、-Delimiter 指定分隔符、-Append 追加、-UseCulture 用系统分隔符 |
| 编码选择 | 给 Excel 看用带 BOM 的 UTF8,给程序读用无 BOM |
| 导入类型 | 所有列均为字符串,需按需转型 |
典型使用场景
- 把服务、进程或磁盘清单导出成表格,方便同事用 Excel 查看
- 与外部系统交换数据,例如导入资产或账号清单
- 批量修改前的留档导出,便于事后比对与回滚
- 巡检脚本输出结果文件,配合差异比对看趋势
- 把 CSV 当简单配置表,导入后驱动脚本执行
常用示例
常用示例
# 导出服务清单,去掉类型首行
Get-Service | Select-Object Name, Status | Export-Csv D:\svc.csv -NoTypeInformation -Encoding UTF8
# 追加到已有文件,表头只在文件首部保留一份
Get-Service Spooler | Select-Object Name, Status | Export-Csv D:\svc.csv -NoTypeInformation -Append -Encoding UTF8
# 导入并过滤
Import-Csv D:\svc.csv | Where-Object Status -eq Stopped
# 导入后做数值比较需显式转换
Import-Csv D:\disk.csv | Where-Object { [int]$_.FreeGB -lt 10 }
# 中文给 Excel 看时用带 BOM 的编码
Get-Process | Select-Object Name, Id | Export-Csv D:\proc.csv -NoTypeInformation -Encoding UTF8BOM参数与影响
| 参数 | 作用 | 注意 |
|---|---|---|
| -NoTypeInformation | 去掉首行的类型注释 | 不写会让其他系统多读一列 |
| -Encoding | 指定输出编码 | 5.1 的 UTF8 带 BOM,7 默认不带 |
| -Append | 追加到现有文件 | 表头只在文件首部保留一份 |
| -Delimiter | 指定分隔符 | 目标环境用分号时需显式指定 |
| -UseCulture | 使用系统列表分隔符 | 复制结果粘进 Excel 时很方便 |
给 Excel 打开的文件要用带 BOM 的 UTF8 才能正确显示中文;给程序解析的文件选无 BOM,否则解析器可能把 BOM 当作第一个字段的一部分。
Import-Csv 读回来的每一列都是字符串,直接做大小比较会按字典序得到错误结论(例如 10 小于 9),比较前先用 [int]、[double] 或 [datetime] 转换。