0

下面的代码输出以下内容。

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}
    }
} 
4

1 回答 1

2

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

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

$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 文件;(只是为了显示您如何指定它),并且在开始时没有类型信息。如果你export-csv在 foreach 循环中使用,它每次都会覆盖文件,最后你只有一行 + 标题行。在 PS3.0 中,您可以使用-Appendswitch 在循环内完成。

编辑如果您真的需要字符串格式,则需要使用其他内容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
        }
    }
} 
于 2013-05-21T16:11:01.090 回答