管道foreach循环CSV PowerShell

时间:2013-11-28 22:51:56

标签: powershell csv pipe

我编写了一个脚本但无法将其导出为CSV或以任何方式输出。

PowerShell不喜欢foreach循环和导出。

对于.txt文件中的每个“folderpath / filename”,它会检查文件是否仍然存在并输出true或false + folderpath / file name。

脚本工作正常,只是无法将事物导出为CSV。

任何想法我做错了什么?

foreach ($WantFile in Get-Content "C:\scripts\folderpaths.txt") {
    $FileExists = Test-Path $WantFile

    if ($FileExists -eq $True) {
        Write-Output $wantfile "True"
    } else {
        Write-Output $wantfile "False"
    }
} | Export-Csv C:\scripts\output.csv -noType 

3 个答案:

答案 0 :(得分:3)

将您的代码更改为:

Get-Content 'C:\scripts\folderpaths.txt' | % {
  if (Test-Path -LiteralPath $_) {
    Write-Output $_ "True"
  } else {
    Write-Output $_ "False"
  }
} | Export-Csv 'C:\scripts\output.csv' -NoType 

我怀疑生成的文件是否包含您所期望的内容。 Export-Csv导出对象的属性。您生成的输出是字符串对象(实际上每个Write-Output语句为2),它们的唯一属性是Length,因此您的结果将是一列,其中包含您回显的字符串的长度。

要创建一个包含2列的CSV,一列用于路径,另一列用于创建具有所需属性的对象所需的路径,例如像这样:

Get-Content 'C:\scripts\folderpaths.txt' `
  | select @{n='Path';e={$_}}, @{n='Exists';e={Test-Path -LiteralPath $_}} `
  | Export-Csv 'C:\scripts\output.csv' -NoType

答案 1 :(得分:1)

关于原始问题(将foreach循环的输出导出为CSV),您可以通过将其包装在子表达式中将该输出输出到管道,但这不会解决脚本中的其他问题到了你想要出口的东西:

$(ForEach ($WantFile in Get-Content "C:\scripts\folderpaths.txt"){

  $FileExists = Test-Path $WantFile 

  If ($FileExists -eq $True) {Write-Output $wantfile "True"}

  Else {Write-Output $wantfile "False"}

})| export-csv C:\scripts\output.csv -noType 

答案 2 :(得分:1)

我遇到了同样的问题,我按照以下方式完成了工作。

$forloop = foreach ( $i in $computers)
    {
      $i
      $out = .\psexec.exe \\$i C:\hp\hpsmh\bin\smhlogreader.exe --version 
      $out


     } 

$forloop | Out-file C:\scripts\output.txt -Append