PowerShell筛选文本内容后转CSV导出无表头、仅单列问题求解
问题原因分析
- 直接将字符串数组传给
Export-CSV会导致导出异常:Export-CSV的设计逻辑是导出对象的属性值,你传入纯文本行时,它会默认导出字符串对象的内部属性,就会出现你看到的FormatEntryData相关的异常内容。 - 日志行是固定分隔的结构化文本,没有提前拆分成对应字段的话,导出CSV自然会全部挤在第一列。
修正后的完整脚本
$LogFile = "\\server44.socogen.com\Share01\REPORTS\Status.txt" $Workfile = "\\WORKSTN\temp\WorkFile.csv" $Filter = "POLICY" # 定义对应字段的表头 $Headers = 'Session End', 'Time', 'Policy', 'Client', 'Schedule', 'Status' # 筛选符合条件的行,处理每一行转成自定义对象 Get-Content $LogFile | Where-Object {$_ -match $Filter} | ForEach-Object { # 按多个空白字符拆分当前行,限制最多拆成6段,避免字段内容含空格时拆分出错 $fields = $_ -split '\s+', 6 | Where-Object {$_} # 生成对应表头的自定义对象 [PSCustomObject]@{ $Headers[0] = $fields[0] $Headers[1] = $fields[1] $Headers[2] = $fields[2] $Headers[3] = $fields[3] $Headers[4] = $fields[4] $Headers[5] = $fields[5] } } | Export-Csv -Path $Workfile -NoTypeInformation -Encoding UTF8
关键修改说明
- 每行拆分逻辑适配日志格式,限制拆分次数避免字段内容包含空格时拆分错误
- 把纯文本行转成结构化的
PSCustomObject对象,符合Export-CSV的输入要求,导出后自动按字段分列 - 导出时添加
-NoTypeInformation参数,去掉CSV开头的#TYPE冗余行;添加-Encoding UTF8避免特殊字符乱码
内容的提问来源于stack exchange,提问作者isd503
相关产品推荐
相关产品推荐

