在 foreach 循环中处理 ADComputer 输出
Work with ADComputer output in foreach loop
我想首先使用 foreach
循环输出网络中的所有主机名,以便(例如)能够 ping 通它们。
但是使用下面的代码我没有在控制台中得到任何输出。 CSV文件会被保存,但是循环中写入的内容不会被执行
有谁知道这是什么原因,我该如何解决?
Import-Module activedirectory
Get-ADComputer -Filter * -Property * | Select Name | Export-CSV -Path $env:TEMP\ZZZEXPORTE.csv -NoTypeInformation -Encoding UTF8 | ForEach {
$computerName = $_.Name
Write-Host $computerName
Write-Host "----"
}
这是因为Export-CSV
没有输出对象。有时像这样的 cmdlet 有一个 -PassThru
参数,您可以使用它来传递对象,但 Export-CSV
不是这种情况,它们只是希望它始终是管道中的最后一个 cmdlet。
您应该这样做:
$Computers = Get-ADComputer -Filter * -Property * | Select Name
$Computers | Export-CSV -Path $env:TEMP\ZZZEXPORTE.csv -NoTypeInformation -Encoding UTF8
$Computers | ForEach {
$computerName = $_.Name
Write-Host $computerName
Write-Host "----"
}
你也可以这样做:
Get-ADComputer -Filter * -Property * | Select Name | ForEach {
$computerName = $_.Name
Write-Host $computerName
Write-Host "----"
$_
} | Export-CSV -Path $env:TEMP\ZZZEXPORTE.csv -NoTypeInformation -Encoding UTF8
注意到我们必须将 $_
添加到我们的 ForEach-Object
循环中,以便它将当前项目输出到管道,但是我们的 Write-Host
语句不会影响管道因为他们只写到控制台。老实说,对于阅读您代码的其他人来说,这有点难以理解。
我想首先使用 foreach
循环输出网络中的所有主机名,以便(例如)能够 ping 通它们。
但是使用下面的代码我没有在控制台中得到任何输出。 CSV文件会被保存,但是循环中写入的内容不会被执行
有谁知道这是什么原因,我该如何解决?
Import-Module activedirectory
Get-ADComputer -Filter * -Property * | Select Name | Export-CSV -Path $env:TEMP\ZZZEXPORTE.csv -NoTypeInformation -Encoding UTF8 | ForEach {
$computerName = $_.Name
Write-Host $computerName
Write-Host "----"
}
这是因为Export-CSV
没有输出对象。有时像这样的 cmdlet 有一个 -PassThru
参数,您可以使用它来传递对象,但 Export-CSV
不是这种情况,它们只是希望它始终是管道中的最后一个 cmdlet。
您应该这样做:
$Computers = Get-ADComputer -Filter * -Property * | Select Name
$Computers | Export-CSV -Path $env:TEMP\ZZZEXPORTE.csv -NoTypeInformation -Encoding UTF8
$Computers | ForEach {
$computerName = $_.Name
Write-Host $computerName
Write-Host "----"
}
你也可以这样做:
Get-ADComputer -Filter * -Property * | Select Name | ForEach {
$computerName = $_.Name
Write-Host $computerName
Write-Host "----"
$_
} | Export-CSV -Path $env:TEMP\ZZZEXPORTE.csv -NoTypeInformation -Encoding UTF8
注意到我们必须将 $_
添加到我们的 ForEach-Object
循环中,以便它将当前项目输出到管道,但是我们的 Write-Host
语句不会影响管道因为他们只写到控制台。老实说,对于阅读您代码的其他人来说,这有点难以理解。