Создание пользовательских объектов и использование вывода

StackOverflow https://stackoverflow.com/questions/966869

  •  12-09-2019
  •  | 
  •  

Вопрос

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

$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 содержит только последнюю запись.Что я делаю не так?

Это было полезно?

Решение

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

Get-content computers.txt | foreach-object {
    import-csv "$computer.txt" -Header $header | Select -first 1 
} | Export-csv $users -notype

Другие советы

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

$arr = @()

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

$arr | Export-csv -path  $users -notype
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top