2013-11-28 80 views
1

我编写了一个脚本,但无法以任何方式将它导出到CSV或输出。pipe foreach loop CSV Powershell

Powershell不喜欢foreach循环和导出。

对于.txt文件每个“FOLDERPATH /文件名”,它会检查该文件是否仍然存在,输出真或假+ FOLDERPATH /文件名

脚本工作正常,只是不能得到的东西导出到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 
+0

什么是你想要写入输出文件?您的循环不会向管道写入任何内容。 – alroc

+1

@alroc AFAICS正是他试图解决的问题。 ;) –

+0

没错,但他没有定义'output.csv'的预期内容。如果你不知道目的地,你不能很好地绘制一条路线。 – alroc

回答

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 
+0

真棒谢谢!第二个代码是解决方案,并输出完全如何,我希望它:) – user2770724

+0

虽然在我原来的代码,我如何使输出(如真或假)输出到变量? – user2770724

+0

@ user2770724我不确定你的意思。你想在变量中输出哪个输出? –

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 
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