Подтвердить что ты не робот

Экспорт-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"
4b9b3361

Ответ 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