【问题标题】:Work with ADComputer output in foreach loop在 foreach 循环中使用 ADComputer 输出
【发布时间】:2018-07-19 22:59:05
【问题描述】:

我想首先使用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 "----"
}

【问题讨论】:

    标签: powershell foreach module hostname computer-name


    【解决方案1】:

    这是因为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 语句不会影响管道,因为它们仅写入控制台.不过老实说,对于其他阅读您的代码的人来说,这有点难以理解。

    【讨论】:

      猜你喜欢
      • 2020-03-03
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多