2013-11-28 4 views
1

Ive написал сценарий, но не может получить его для экспорта в CSV или вывода каким-либо образом.pipe foreach loop CSV Powershell

Powershell не любит петли foreach и экспорт.

Для каждого «путь_к_папки/файла» в файле .txt он проверяет, если файл существует и выходы истинные или ложные + путь_к_папка/имя файл

Скрипт работает отлично, просто не может получить вещь экспорт в 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 экспортирует свойства объектов. Вывод, который вы генерируете, представляет собой строковые объекты (2 с каждым оператором Write-Output), и их единственным свойством является Length, поэтому ваш результат будет одним столбцом с длинами строк, которые вы эхо.

Чтобы создать 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

Awesome thanks !! Второй код - это решение и выводит именно то, как я этого хотел :) – user2770724

+0

Хотя на моем исходном коде, как я могу сделать вывод (например, true или false) в переменную? – user2770724

+0

@ user2770724 Я не уверен, что вы имеете в виду. Какой результат вы хотите в переменной? –

1

Что касается первоначального вопроса (экспортирующей выход петли Еогеаспа в 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 
Смежные вопросы