PowerShell и CSV файлы - PullRequest
       2

PowerShell и CSV файлы

0 голосов
/ 06 сентября 2018

У меня есть скрипт, который запускается с циклом for.

Выводит 3 переменные: $A, $B и $C.

Я бы хотел на каждой итерации выводить эти 3 переменные в одну строку внутри файла вместо стандартного вывода (каждая из которых разделена запятой). Я хотел бы добавить заголовок. Я создаю CSV-файл.

Я видел несколько способов вывода переменных внутри файла CSV, но не внутри цикла for.

Есть ли способ объединить эти 3 переменные и добавить их в файл?

Write-Host $A ',' $B ',' $C | Out-File -FilePath C:\temp\TEST.csv -Append

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018

Write-Host вывод идет непосредственно на хост-консоль. Это не может быть передано по конвейеру. Кроме того, как уже упоминалось, вы обычно хотите использовать командлеты Import-Csv и Export-Csv при работе с CSV (особенно если вам нужен CSV с заголовками).

Чтобы получить набор переменных в форме, которая может быть экспортирована с помощью Export-Csv, создайте пользовательский объект, подобный этому:

New-Object -Type PSObject -Property @{
    'X' = $A
    'Y' = $B
    'Z' = $C
} | Export-Csv 'C:\Temp\test.csv' -NoType

Ключи хеш-таблицы свойств становятся заголовками столбцов CSV.

Поскольку вы говорите, что хотите экспортировать данные из цикла for, вам необходимо добавить параметр -Append в Export-Csv:

for (...) {
    New-Object ... | Export-Csv 'C:\Temp\test.csv' -NoType -Append
}

Это потому, что циклы for не записывают в конвейер, что означает, что нечто подобное не будет работать:

<strike>for (...) {
    New-Object ...
} | Export-Csv 'C:\Temp\test.csv' -NoType</strike>

Однако, в зависимости от того, как выглядит ваш реальный цикл, вы можете заменить его комбинацией оператора диапазона (..) и цикла ForEach-Object:

1..5 | ForEach-Object {
    New-Object ...
} | Export-Csv 'C:\Temp\test.csv' -NoType
0 голосов
/ 06 сентября 2018

При условии at each iteration to outout those 3 variables это не означает буквальное,
вы можете собрать выходные данные для циклов for в переменной через PSCustomObject и затем Export-Csv результат.

Для демонстрации простого цикла подсчета:

$Result = for ($i=1;$i -lt 5;$i++){[pscustomobject]@{X=$i;Y=$i+1;Z=$i+2}}
$Result

X Y Z
- - -
1 2 3
2 3 4
3 4 5
4 5 6

Затем Export / ConvertTo-Csv:

$Result|ConvertTo-Csv -NoTypeInformation
"X","Y","Z"
"1","2","3"
"2","3","4"
"3","4","5"
"4","5","6"
0 голосов
/ 06 сентября 2018
$A = 'foo'
$B = 'bar'
$C = 'baz'
"$A,$B,$C" # outputs Foo,Bar,Baz

Однако, если вы работаете с CSV, предпочтительным методом является использование Import-Csv и Export-Csv, которые обрабатывают форматирование для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...