Export-CSV exports length but not name

拈花ヽ惹草 提交于 2019-11-26 09:10:07

问题


I have this code that I am running from powershell. When I run it without the export-csv i get all the folder names on the screen.

dir | select -expand fullname | % { ($_ -split \'\\\')[7] 

But if I add | export-csv c:\\test.txt then I see following in the file not the folder name I expected just like I see it on the screen.

#TYPE System.String
\"Length\"
\"13\"
\"18\"
\"20\"
\"22\"
\"29\"
\"21\"
\"24\"
\"11\"
\"17\"
\"20\"
\"20\"

回答1:


Export-Csv exports a table of object properties and their values. Since your script is producing string objects, and the only property they have is length, that's what you got.

If you just want to save the list, use Out-File or Set-Content instead of Export-Csv.




回答2:


The previous answer does work, but what if someone was looking to output it into a CSV file.


This does NOT work:

$str_list = @('Mark','Henry','John')
$str_list | Export-Csv .\ExportStrList.csv -NoType

Because Export-Csv takes Objects and outputs properties. The only properties for a String[ ] is Length, so the CSV file only contains Lengths.

To fix this we need to change the String[ ] into an Object[ ]. The simplest way is with Select-Object.


Put each String into the Name property of a new Object[ ], like this:

$str_list = @('Mark','Henry','John')
$obj_list = $str_list | Select-Object @{Name='Name';Expression={$_}}
$obj_list | Export-Csv .\ExportStrList.csv -NoType

Just to re-iterate, Select-Object outputs a custom PSObject that can easily be manipulated. This is very powerful information, use it wisely.




回答3:


This worked for me:

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


This is another way to handle this issue:

  1. Out-File outputs by default

Define the master array list

$MASTER_ARRAY_LIST =  [System.Collections.ArrayList]@()

Define the output filename

$OutputFilename="C:\TEMP\MyOutputFile.csv"

ForEach ( $Something in $List_of_Somethings) {
    $CURRENT_RECORD_DETAILS = New-Object PSObject -Property @{'name'=$($Something.Name);'fullname'=$($Something.FullName);'id'=$($Something.ID)}
    $MASTER_ARRAY_LIST.Add( $CURRENT_RECORD_DETAILS ) > $null
}

$MASTER_ARRAY_LIST.ToArray() | Select-Object -Property name,fullname,id | Export-Csv -Path $OutputFilename -NoTypeInformation



回答5:


$output |Select-Object * | Export-Csv 'h:\filename.csv' -NoTypeInformation


来源:https://stackoverflow.com/questions/19450616/export-csv-exports-length-but-not-name

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!