PowerShell 中的 Export-Csv 协助

Assistance w/ Export-Csv in PowerShell

我正在使用下面的脚本来引用一个包含计算机名称列表的 txt 文件,以找出每台计算机上的 OS 和 OS 版本。我可以让它在 PowerShell 中显示,但我为将其导出到 CSV 文件所做的所有尝试都失败了。我在这里使用了其他推荐使用 Write-output 和 Export-csv 的文章,但我得到的只是错误(取决于位置)或者我得到了一个显示长度和字符数的 CSV 文件。我不介意投入工作,但我觉得我不明白我应该在哪里放置管道并将结果转到 CSV 文件。

$Computers = Import-Csv -Path "c:\Scripts\computers.txt" -Header "Name"
foreach ($Computer in $Computers) {
    try {
        Get-ADComputer -Identity $Computer.Name -Properties Name, operatingSystem, operatingSystemVersion |
            Select Name, operatingSystem, operatingSystemVersion
    } catch {
        $Computer.Name + " not in AD" |
            Export-Csv -Path .\computers-results.csv -NoTypeInformation
    }
}

试试这个:

$Computers = Import-CSV -Path "c:\Scripts\computers.txt" -Header "Name"

$Result = ForEach ($Computer In $Computers)
{
  Try
  {
      Get-ADComputer -Identity $Computer.Name -Properties Name, operatingSystem, operatingSystemVersion | Select Name, operatingSystem, operatingSystemVersion
  }
  Catch
  {
      Write-Warning $Computer.Name + " not in AD"
  }
}

$Result | Export-CSV .\computers-results.csv -NoTypeInformation

这是通过将 ForEach 循环的结果整理到 $Result 变量中来实现的,这是因为 Get-ADComputer 行的结果正在返回到管道。

循环完成后 $Result 是一个对象集合,然后我们可以将其发送到 Export-CSV 以转换为 CSV 文件。

请注意,我还更改了 Catch 部分以使用 Write-Warning 因此您只会在您的控制台中看到无法访问的机器,它们不会出现在您的完全没有输出文件。