我有从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"
答案 0 :(得分:20)
Export-Csv
导出一个对象属性及其值的表。由于您的脚本正在生成字符串对象,并且它们拥有的唯一属性是长度,这就是您所拥有的。
如果您只想保存列表,请使用Out-File
或Set-Content
代替Export-Csv
。
答案 1 :(得分:12)
之前的答案确实有效,但如果有人想将其输出到CSV文件中会怎样
这样做 NOT 工作:
$str_list = @('Mark','Henry','John')
$str_list | Export-Csv .\ExportStrList.csv -NoType
因为Export-Csv
获取对象和输出属性。 String []的唯一属性是Length,因此CSV文件仅包含Length。
要解决此问题,我们需要将String []更改为Object []。最简单的方法是使用Select-Object
将每个String放入新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。这是非常强大的信息,明智地使用它。
答案 2 :(得分:6)
这对我有用:
$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
答案 3 :(得分:0)
这是处理此问题的另一种方法:
定义主阵列列表
$MASTER_ARRAY_LIST = [System.Collections.ArrayList]@()
定义输出文件名
$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
答案 4 :(得分:0)
$test = @("test1","test2","test3")
$test | export-csv "firstTry.csv"
#We see that this fails. So here is how to to do it with the desired results
foreach ($item in $test) {
[ pscustomobject]@{ ResultColumn = $item } | Export-Csv -Path ./secondTry.csv -NoTypeInformation -Append
}
答案 5 :(得分:-3)
$output |Select-Object * | Export-Csv 'h:\filename.csv' -NoTypeInformation