Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 导出CSV导出长度,但不导出名称_Powershell_Export To Csv - Fatal编程技术网

Powershell 导出CSV导出长度,但不导出名称

Powershell 导出CSV导出长度,但不导出名称,powershell,export-to-csv,Powershell,Export To Csv,我有这个代码,我是从powershell运行的。当我在没有导出csv的情况下运行它时,屏幕上会显示所有文件夹名称 dir | select -expand fullname | % { ($_ -split '\')[7] #TYPE System.String "Length" "13" "18" "20" "22" "29" "21" "24" "11" "17" "20" "20" 但是如果我添加| export csv c:\test.txt,那么我在文件中看到的不是我期望的文件夹

我有这个代码,我是从powershell运行的。当我在没有导出csv的情况下运行它时,屏幕上会显示所有文件夹名称

dir | select -expand fullname | % { ($_ -split '\')[7] 
#TYPE System.String
"Length"
"13"
"18"
"20"
"22"
"29"
"21"
"24"
"11"
"17"
"20"
"20"
但是如果我添加
| export csv c:\test.txt
,那么我在文件中看到的不是我期望的文件夹名称,就像我在屏幕上看到的那样

dir | select -expand fullname | % { ($_ -split '\')[7] 
#TYPE System.String
"Length"
"13"
"18"
"20"
"22"
"29"
"21"
"24"
"11"
"17"
"20"
"20"

导出Csv
导出对象属性及其值的表格。由于您的脚本正在生成字符串对象,并且它们唯一的属性是长度,所以您得到的就是长度


如果您只想保存列表,请使用
Out File
Set Content
而不是
Export Csv

前面的答案确实有效,但如果有人想将其输出到Csv文件中该怎么办。


这不起作用:

$str_list = @('Mark','Henry','John')
$str_list | Export-Csv .\ExportStrList.csv -NoType
因为
导出Csv
获取对象并输出属性。字符串[]的唯一属性是长度,因此CSV文件只包含长度

要解决这个问题,我们需要将字符串[]更改为对象[]。最简单的方法是使用
选择对象



将每个字符串放入新对象[]的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。这是非常强大的信息,请明智地使用它。

这对我很有用:

$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

这是处理此问题的另一种方法:

  • 默认情况下,输出文件输出
  • 定义主数组列表

    $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
    

    我还添加了| out文件“C:\TEST.TXT”-Append。ThanksI在我的csv文件中得到了长度。事实证明,在我调用的函数中,当我删除csv时,它有一些语音文字标记,开始正确返回对象。这一行对我帮助最大-$obj_list=$str_list | Select Object@{Name='Name';Expression={$}.您正在回答一个6年前的问题,因此,如果您能添加更多的细节,而不仅仅是“这是另一种方式”,那就太好了。如果它比以前的任何一个答案都好,你能解释一下原因吗?同时请格式化你的答案。使用适当的字体大小,适当使用粗体,并将代码放入代码块,而此代码可能会回答问题,提供有关此代码回答问题的原因和/或方式的附加上下文,从而提高其长期价值。