gpt4 book ai didi

powershell - 在foreach循环中使用ADComputer输出

转载 作者:行者123 更新时间:2023-12-03 01:06:08 28 4
gpt4 key购买 nike

我想首先使用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语句不会影响管道,因为它们仅写入控制台。不过,老实说,对于其他阅读您的代码的人来说,这很难遵循。

关于powershell - 在foreach循环中使用ADComputer输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48701321/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com