Export-CSV无法使用我的foreach循环

时间:2016-07-20 17:15:02

标签: powershell active-directory export-to-csv

我编写了一段代码,用于捕获一些数据并将其写入CSV文件。我已经用两种方式写了它。 1)第一种方式只给我最后的结果,而不是所有的结果,几乎就像是在写自己。 2)第二种方式给我一个错误,上面写着"不允许空管元素"

方式1)

foreach ($Computer in $CompObjToRM)
{
Get-ADComputer -Identity $Computer | Select Name, DistinguishedName | Export-CSV C:\T2\ServersToRemoveFromAD2.csv -NoTypeInformation
} 

方式2)

foreach ($Computer in $CompObjToRM)
{
Get-ADComputer -Identity $Computer | Select Name, DistinguishedName
} | Export-CSV C:\T2\ServersToRemoveFromAD2.csv -NoTypeInformation

我做错了什么?

1 个答案:

答案 0 :(得分:1)

-Append开关参数与Export-Csv一起使用,以避免覆盖同一文件:

foreach ($Computer in $CompObjToRM)
{
    Get-ADComputer -Identity $Computer | Select Name, DistinguishedName | Export-CSV C:\T2\ServersToRemoveFromAD2.csv -Append -NoTypeInformation
} 

或使用ForEach-Object cmdlet(您可以从中将所有输出传递给Export-Csv

$CompObjToRM |ForEach-Object {
    Get-ADComputer -Identity $_ | Select Name, DistinguishedName 
} | Export-CSV C:\T2\ServersToRemoveFromAD2.csv -NoTypeInformation

这里最大的区别是foreach($thing in $things){}是语言的内置语义功能,而ForEach-Object cmdlet - 一段可重用的代码,支持管道输入和输出

ForEach-Object可能比foreach循环慢一点(并且行为略有不同),但在大多数情况下,它只是为您提供更大程度的灵活性来组成管道