Создание пользовательских объектов и использование вывода
-
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
Не связан с StackOverflow