Экспорт-CSV экспортирует длину, но не имя
У меня есть этот код, который я запускаю из powershell. Когда я запускаю его без export-csv, я получаю все имена папок на экране.
dir | select -expand fullname | % { ($_ -split '\')[7]
Но если я добавлю | export-csv c:\test.txt
, то я вижу следующее в файле, а не имя папки, которое я ожидал, как будто я вижу его на экране.
#TYPE System.String
"Length"
"13"
"18"
"20"
"22"
"29"
"21"
"24"
"11"
"17"
"20"
"20"
Ответы
Ответ 1
Export-Csv
экспортирует таблицу свойств объекта и их значений. Поскольку ваш script создает строковые объекты, и единственное свойство, которое у них есть, это длина, то, что вы получили.
Если вы хотите сохранить список, используйте Out-File
или Set-Content
вместо Export-Csv
.
Ответ 2
Предыдущий ответ действительно работает, но что, если кто-то искал его вывод в файл CSV.
Это работает НЕ:
$str_list = @('Mark','Henry','John')
$str_list | Export-Csv .\ExportStrList.csv -NoType
Потому что Export-Csv
принимает объекты и выводит свойства. Единственными свойствами для String [] является Length, поэтому файл CSV содержит только длины.
Чтобы исправить это, нам нужно изменить String [] в Object []. Самый простой способ - Select-Object
.
Поместите каждую строку в свойство Name нового объекта [], например:
$str_list = @('Mark','Henry','John')
$obj_list = $str_list | Select-Object @{Name='Name';Expression={$_}}
$obj_list | Export-Csv .\ExportStrList.csv -NoType
Для повторной итерации Select-Object
выводит пользовательский PSObject, который можно легко манипулировать. Это очень мощная информация, используйте ее с умом.
Ответ 3
Это сработало для меня:
$data = @()
$row = New-Object PSObject
$row | Add-Member -MemberType NoteProperty -Name "name1" -Value "Test"
$row | Add-Member -MemberType NoteProperty -Name "name2" -Value 2
$data += $row
$data | Export-Csv "Text.csv" -NoTypeInformation
Ответ 4
$output |Select-Object * | Export-Csv 'h:\filename.csv' -NoTypeInformation