【问题标题】:Export-CSV formatting carriage returns导出-CSV 格式回车
【发布时间】:2014-10-21 04:42:26
【问题描述】:

我正在从活动目录中检索信息,但是当我尝试使用Export-CSV 导出它时,回车出现了一些问题。它在 CSV 文件中为它找到的每个返回开始一个新行,而它实际上应该保留在当前行上。

$User = Get-ADUser Bob -Properties *
Display name    : Bob Smith
Notes           : Line 1
                  Line 2
                  Line 3
E-mail          : Bob.Smith@company.com

$User | Export-CSV 'C:\file.csv'
Display name, Notes, E-mail
Bob Smith, Line 1
Line 2
Line 3
Bob.Smith@company.com

我怎样才能得到以下输出?

$User | Export-CSV 'C:\file.csv'
Display name, Notes, E-mail
Bob Smith, Line 1 Line 2 Line 3, Bob.Smith@company.com

我已经尝试过编码,其他分隔符,.. 无法真正弄清楚这一点。

解决方案

$User | Select 'Display Name', @{l='Notes';e={$_.Notes -replace "`n"," "}}, E-mail | Export-Csv 'C:\file.csv' -NoTypeInformation -Delimiter ';'

【问题讨论】:

    标签: powershell csv export


    【解决方案1】:

    如果您在插入带有特定字段的 CR/LF 时遇到问题,您始终可以在 Select 运算符的表达式中对 Notes 执行 -join。比如:

    $User | Select DisplayName, @{l='Notes';e={$_.Notes -join ", "}}, Email | Export-Csv 'C:\files.csv'
    

    这将输出所需的输出。

    如果您遇到多个字段的问题,那么就我如何解决它而言,它会变得有点复杂(通过将对象复制为自定义对象,重新创建所有字段,并使用 -join 或将“`n”替换为 ', ')

    【讨论】:

    • 感谢您的提示,效果很好:) 我按照您的建议使用了-replace 方法。使用解决方案更新了 OP。
    【解决方案2】:

    你得到的结果应该是正确的,因为它是由“,”分隔的。如果您通过“Import-Csv”导入 csv,您将获得正确的数据。问题是属性“Notes”。有换行符。排除注释或将 ``r`n(换行符)替换为 "$null"。

    【讨论】:

      【解决方案3】:

      真的很老的帖子,但经过广泛的谷歌搜索后仍然找不到答案,但我自己偶然发现了正确的答案并决定分享。 问题是输出 CSV 有换行符。

      $resultti = $result.computername -join " " | Out-String

      $resultti | Export-Csv -Path $outfile -Delimiter ";" -NoTypeInformation -Encoding UTF8

      输出的 CSV 看起来像 "-character 总是在下一行:

      “姓名”;“电子邮件”;“Samaccountname”;“工作站”

      "Pete";"pete@xx.fi";"pete";"W7DT1335 W7LT1812

      "

      "安妮";"anne@xx.fi";"anne";"W7DT13565 W7LT1612

      "

      "Anton";"Anton@xx.fi";"anton";"W7DT1345 W7LT1752

      "

      替换结果也不好。

      $resultti = $resultti.Replace("`n","x")
      

      --> CSV 看起来像:

      “姓名”;“电子邮件”;“Samaccountname”;“工作站” "皮特";"pete@xx.fi";"皮特";"W7DT1335 W7LT1812

      x"

      "安妮";"anne@xx.fi";"anne";"W7DT13565 W7LT1612

      x"

      "Anton";"Anton@xx.fi";"anton";"W7DT1345 W7LT1752

      x"

      对我来说,解决方案是像这样输出字符串: $resultti = $result.computername -join " " | Out-String -Stream

      CSV 照顾得很好。

      “姓名”;“电子邮件”;“Samaccountname”;“工作站”

      "Pete";"pete@xx.fi";"pete";"W7DT1335 W7LT1812"

      "安妮";"anne@xx.fi";"anne";"W7DT13565 W7LT1612"

      "Anton";"Anton@xx.fi";"anton";"W7DT1345 W7LT1752"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-21
        • 2021-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多