Добавление контента в CSV Powershell - PullRequest
0 голосов
/ 18 октября 2018

Когда я запускаю приведенный ниже код, я получаю список деталей в отдельных столбцах.

$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     |
+-----------+---------+-----------------+---------+----------------+------------+-------------+

Однако, если я исправлюЭкспорт-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 голосов
/ 18 октября 2018

Add-Content предназначен для добавления неструктурированного текста в текстовый файл , аналогично Set-Content - его нельзя использовать для добавления строк в существующий файл CSV .

Вместо этого необходимо использовать Export-Csv -Append:

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

Предупреждения о кодировке символов , начиная с Windows PowerShell v5.1 [1] :

  • Без -Append, Export-Csv использует ASCII (!) кодирование - против документированного поведения.

    • Это означает, что символы, не входящие в ASCII, транслитерируются в литерал ?, т. е. вы можете потерять информацию .
  • С -Append, что любопытно, символы не-ASCII кодируются UTF-8 - независимо отисходная кодировка файла.

Чтобы получить предсказуемое поведение, всегда используйте -Encoding явно с Export-Csv - как с -Append.

, так и без него.

[1] Кроссплатформенная PowerShell Core * 10Версия 65 * не подвержена влиянию, поскольку она по умолчанию последовательно использует кодировку UTF-8 без спецификации BOM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...