如何将foreach输出传递给export-csv

时间:2013-05-21 15:36:47

标签: powershell

以下代码输出以下内容。

TYPE System.String 长度 100

如何让它实际输出字符串的内容?

$fileIn | % { $array = $_.split(" ")
    if ($array[0] -eq "User") {
        $name = $array[1]+"."+$array[2]
        $remaining = ""
        for ($i = 3; $i -ne $array.length; $i++) {$remaining+=$array[$i]+" "}
        Get-ADUser $name -properties description, company | % { $name + " - " + 
            $remaining + " - " + $_.description + " - " + 
            $_.company | Export-CSV $output}
    }
} 

1 个答案:

答案 0 :(得分:2)

Export-CSV用于将具有属性的对象导出到csv。您正在尝试导出单个字符串,该字符串仅包含值和Length属性。

此外,-不是csv中的有效分隔符(至少不在.NET中)。可以使用-NoTypeInformation - 开关删除类型信息。试试这个:

$fileIn | % { $array = $_.split(" ")
    if ($array[0] -eq "User") {
        $name = $array[1]+"."+$array[2]
        $remaining = ""
        for ($i = 3; $i -ne $array.length; $i++) {$remaining+=$array[$i]+" "}

        Get-ADUser $name -properties description, company | % { 
            New-Object psobject -Property @{
                "Name" = $name
                "Remaining" = $remaining
                "Description" = $_.Description
                "Company" = $_.Company
            }
        }
    }
} | Select-Object Name, Remaining, Description, Company | 
Export-CSV $output -Delimiter ';' -NoTypeInformation

我试图了解你在这里尝试做什么。为了总结一下这些变化:

  • 我正在为$filein

  • 中的每一行创建一个包含您要导出的信息的对象
  • 我正在使用select-object设置属性的顺序在创建$filein中每一行的对象之后

  • 我正在将对象数组导出到带有分隔符;的csv文件中(只是为了说明如何指定它),并且在开头没有类型信息。如果你在foreach循环中使用export-csv,它每次都会覆盖文件,你最后只有一行+ header-row。在PS3.0中,您可以使用-Append开关在循环内完成。

编辑如果您确实需要字符串格式,则需要使用其他内容,然后Export-CSV,例如。 Out-File -Append切换$fileIn | % { $array = $_.split(" ") if ($array[0] -eq "User") { $name = $array[1]+"."+$array[2] $remaining = "" for ($i = 3; $i -ne $array.length; $i++) {$remaining+=$array[$i]+" "} Get-ADUser $name -properties description, company | % { "$name - $remaining - $($_.description) - $($_.company)" | Out-File -Append $output } } } 。例如:

{{1}}