Создание пользовательских объектов и использование вывода - PullRequest
2 голосов
/ 09 июня 2009

Я использую следующее, чтобы прочитать одну строку из всей загрузки текстовых файлов, а затем объединить эту информацию в один файл.

$computers = Get-content computers.txt
$users = users.csv
$header = 'Computer','User','Date','Time'

Foreach ($computer in $computers)
{
$file = $computer +'.txt'

$a = import-csv $file -Header $header | Select -first 1 
$obj = New-Object PSObject
$obj | Add-Member NoteProperty Computer ($a.Computer)
$obj | Add-Member NoteProperty User ($a.User)
$obj | Add-Member NoteProperty Date ($a.Date)
$obj | Add-Member NoteProperty Time ($a.Time)

Write-Output $obj
$obj | Export-csv -path  $users -notype
}

Когда я запускаю код, Write-Output выводит все записи, как и ожидалось, но Export-CSV содержит только последнюю запись. Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 09 июня 2009

Вы перезаписываете файл csv при каждой итерации цикла. Я полагаю, что следующее дает то, что вы после того, как предположите, что каждый CSV-файл имеет только четыре столбца (т.е. компьютер, пользователь, дата, время):

Get-content computers.txt | foreach-object {
    import-csv "$computer.txt" -Header $header | Select -first 1 
} | Export-csv $users -notype
2 голосов
/ 09 июня 2009

Создайте переменную массива и добавьте к ней каждый $ obj. После цикла foreach экспортируйте массив объектов, например ::100100

$arr = @()

foreach (...) {
    ...
    $arr += $obj
}

$arr | Export-csv -path  $users -notype
...