PowerShell查询域用户密码最后修改时间导出CSV异常问题
问题根因
你的脚本循环内最终输出的是分号拼接的纯字符串,Export-Csv的运行逻辑是接收结构化PowerShell对象作为输入,自动解析对象的属性作为CSV列。当传入字符串类型数据时,Export-Csv会导出字符串本身的系统属性(如长度、类型等),而非你拼接的内容拆分后的字段,这就是导出结果异常的核心原因。直接运行脚本时控制台仅输出字符串的字面内容,所以显示符合预期。
解决步骤
方法1:修改脚本输出结构化对象(推荐)
将脚本末尾的拼接字符串输出代码:
"$DN;$blnPwdExpires;$PwdLastSet"
替换为输出自定义对象:
[PSCustomObject]@{ 可分辨名称 = $DN 密码是否可过期 = $blnPwdExpires 上次密码修改时间 = $PwdLastSet }
修改完成后,执行以下命令即可导出符合预期的CSV文件,参数-NoTypeInformation可去掉CSV开头多余的类型说明行,-Encoding UTF8避免乱码:scriptname.ps1 | Export-Csv "filename.csv" -Encoding UTF8 -NoTypeInformation
方法2:无需修改脚本直接输出文本(适配现有拼接逻辑)
如果不想改动原有脚本,可直接使用文本输出命令替代Export-Csv,直接将拼接好的分号分隔内容写入文件:scriptname.ps1 | Out-File "filename.csv" -Encoding UTF8
该方法生成的CSV默认以分号作为分隔符,打开时若出现列合并的情况,可在表格软件导入时指定分隔符为分号即可。
内容的提问来源于stack exchange,提问作者M.T Davis
相关产品推荐
相关产品推荐

