我编写了一段代码,用于捕获一些数据并将其写入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
我做错了什么?
答案 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
循环慢一点(并且行为略有不同),但在大多数情况下,它只是为您提供更大程度的灵活性来组成管道