首页/系统/Windows 运维速查/Export-Csv / Import-Csv 表格交换
PowerShell 基础66 条

Export-Csv / Import-Csv 表格交换

对象导出为 CSV 或从 CSV 导入:跨系统交换数据最通用的格式,注意编码与 -NoTypeInformation。

Windows 运维速查系统更新于 2026-10-13

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] 转换。

易错点

  • 漏写 -NoTypeInformation 会多出一行以类型名开头的内容,被其他系统读取时就多出一列
  • 导入的数值列是字符串,直接比较会得到错误结果,必须先转型
  • 用不带 BOM 的编码导出再给 Excel 打开会中文乱码,是编码选择问题
  • 导出前没用 Select-Object 削减属性,会带上大量内部字段,文件臃肿且列名难以理解
  • 向已有文件追加时属性集合不一致会产生错位数据,追加前要保证列结构一致

数据来源与参考

  • Microsoft Learn:Export-Csv
  • Microsoft Learn:Import-Csv

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌