Export-CSV 不适用于我的 foreach 循环

Export-CSV not working with my foreach loop

我写了一段代码,它捕获一些数据并将其写入 CSV 文件。我用两种方式写了它。 1)第一种方式只给我最后的结果,而不是所有的结果,几乎就好像它是在写自己一样。 2) 第二种方式给我一个错误 "An Empty Pipe Element Is Not Allowed"

方法 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

我做错了什么?

或者将 -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-Objectcmdlet - 一段可重用代码支持管道输入和输出。

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