Записать переменные в существующий CSV по столбцам

Это вопрос из двух частей о пределах Out-File и превращение строковых значений в объекты для использования Export-CSV,

Я работаю над сценарием, чтобы получить различную информацию и добавить ее в существующий документ CSV. Я сейчас пользуюсь Out-File но я не думаю, что он обладает желаемой функциональностью.

$date, $computerName, $env:UserName, 'error' | Out-File $report -Append

Выше добавлены все данные в один столбец, например:

date
computername
username
error

Я хотел бы это прочитать:

date computername username error

Я пытался использовать Export-CSV, но так как мои переменные являются строками, он просто записывает длину строки вместо переменной. Я счастлив использовать Export-CSV с -Append до тех пор, пока он сообщает о пунктах правильно.

Бонусные баллы, если мы можем получить таблицу с заголовками, такими как:

date computername username error
8/15/2018 A1 Bob PowerIssue
8/15/2018 A2 Tom InternetIssue

1 ответ

Решение

$date, $computerName, $env:UserName, 'error' это коллекция, которая преобразуется в массив строк. Итак, тогда Out-File берет каждый элемент этого массива и выплевывает его по одному элементу в строке.

Вы можете сгенерировать одну строку. Например,

"$date, $computerName, $env:UserName, error" | Out-File $report -Append

Но лучшим способом было бы сделать объект, а затем экспортировать его в CSV. Вот пример использования [pscustomobject] который требует PS3+

$ExampleObjects = @(
    [pscustomobject]@{
        Date         = Get-Date
        ComputerName = 'A1'
        UserName     = 'Bob'
        Error        = 'PowerIssue'
    },
    [pscustomobject]@{
        Date         = Get-Date
        ComputerName = 'A2'
        UserName     = 'Tom'
        Error        = 'InternetIssue'
    }
)

$ExampleObjects | Export-CSV $report -Append -NoTypeInformation
Другие вопросы по тегам