难以将计算机列表导出到CSV

时间:2019-09-13 19:04:24

标签: powershell

我正在尝试查找C驱动器上具有特定文件夹的所有计算机。 我正在使用正在搜索的所有计算机的txt文件。 如果该文件夹位于c驱动器上,我想将其导出到CSV文档。如果该文件夹不存在,则无需执行任何操作。

我还添加了一个测试连接,以跳过当前离线的所有计算机。

当前,当我单步执行代码时,它似乎正确地击中了每一行,并创建了导出的csv文档,但是它是空白的,没有任何列或数据。

由于我是新人,所以我可能会以错误的角度来解决这个问题。

谢谢。

$A = @(Get-Content 'c:\users\\me\computerlist.txt')
Foreach ($i in $A) {

    If (Test-Connection -ComputerName $i -Quiet -Count 1) {
      Select-Object @{Name='ComputerName';Expression= 
      {$_}},@{Name='FolderExist';Expression={ Test-Path "\\$_\c$\Program 
      Files (x86)\Test"}} | Export-Csv \\me\C$\Users\me\Exported.csv
    }
    Else {Write-Host $i' not reachable'}
}

就像我说的那样,调试它-看似正确地逐步完成并创建了导出文件,但其中没有任何内容。

2 个答案:

答案 0 :(得分:0)

您的ForEach不是ForEach-Object cmdlet,而是循环构造。因此,您不在Export-CSV之前的管道中。不用在两个表达式中使用$_,而要使用$i,它是在ForEach(...)循环的顶部建立的变量:

$A = @(Get-Content 'c:\users\\me\computerlist.txt')
Foreach ($i in (Get-Content -Path "C:\Users\Me\ComputerList.txt")) {

    If (Test-Connection -ComputerName $i -Quiet -Count 1) {
      Select-Object @{Name='ComputerName';Expression={$i}},@{Name='FolderExist';Expression={ (Test-Path "\\$i\c$\Program Files (x86)\Test")}} | Export-Csv \\me\C$\Users\me\Exported.csv
    }  #Note use of $i instead of $_ in above line
    Else {Write-Host $i' not reachable'}
}

答案 1 :(得分:0)

您的Select-Object调用没有收到任何来自管道的输入,因此它不会向使用Export-Csv指定的目标文件发送任何内容。

(即使没有对象最终流过管道,目标文件仍会在管道初始化期间创建,并且为空。)

按如下方式使用单个管道;自动$_变量代表当前的输入对象,它始终引用当前的计算机名称:

Get-Content 'c:\users\me\computerlist.txt' | 
  Where-Object { 
    $reachable = Test-Connection -ComputerName $_ -Quiet -Count 1
    if (-not $reachable) { Write-Host "$_ not reachable" }
    $reachable 
  } | Select-Object @{Name='ComputerName';Expression={$_}},
                    @{Name='FolderExist';Expression={ (Test-Path "\\$_\c$\Program Files (x86)\Test")}} |
        Export-Csv \\me\C$\Users\me\Exported.csv