将内容添加到CSV Powershell

时间:2018-10-18 02:51:02

标签: powershell csv append

运行以下代码时,我在单独的列中获得了详细信息列表。

$file = 'c:\output\testing.csv'
   Get-AdUser -filter "DisplayName -eq 'joe bloggs'" | 
   Get-ADUser -Properties * |  
 Select-Object givenName, surname, mail, 
@{ Label = "Country"
Expression = { if ($_.Country) { $_.Country } else { "GB" } }
 ,samaccountname, department, description | Export-csv -path $file

输出(1)如下:

+-----------+---------+-----------------+---------+----------------+------------+-------------+
| givenName | surname |      mail       | Country | samaccountname | department | description |
+-----------+---------+-----------------+---------+----------------+------------+-------------+
| joe       | bloggs  | joe.b@email.com | GB      | bloggsG        | IT         | Support     |
+-----------+---------+-----------------+---------+----------------+------------+-------------+

但是,如果我将Export-CSV修改为Add-Content,则输出(2)如下:

+---------------------------------------------------------------------------------------------------------------------------------------+---------+------+---------+----------------+------------+-------------+
|                                                               givenName                                                               | surname | mail | Country | samaccountname | department | description |
| {givenName=Fred; surname=Smith; mail=fred.s@email.com; Country=GB; samaccountname=smithF; department=Facilities; description=cleaner} |         |      |         |                |            |             |
+---------------------------------------------------------------------------------------------------------------------------------------+---------+------+---------+----------------+------------+-------------+

如何使用Add-Content显示与第一个表相同的输出?

1 个答案:

答案 0 :(得分:3)

Add-Content用于将非结构化文本附加到文本文件,类似于Set-Content-您不能使用它将行附加到现有的 CSV文件

相反,您必须使用Export-Csv -Append

... | Export-Csv -Path $file -Append -Encoding Ascii # pick the proper encoding

字符编码警告,自Windows PowerShell v5.1起 [1]

  • -AppendExport-Csv使用 ASCII (!)编码-反对记录的行为。

    • 这意味着将非ASCII字符音译为文字 ?,即您可能会丢失信息
  • 使用 -Append,奇怪的是,非ASCII字符是 UTF-8 编码的-与文件的原始编码无关。

要获得可预测的行为,请始终将-EncodingExport-Csv一起显式使用-不论是否使用-Append


[1]跨平台PowerShell Core 版本不受影响,因为默认情况下始终使用无BOM的UTF-8编码。