Frage

Ich verwende die folgenden eine Zeile aus einer ganzen Last von Textdateien zu lesen und dann diese Informationen in einer Datei zusammenfassen.

$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
}

Wenn ich führen Sie den Code der Write-Output-Ausgänge alle Datensätze wie erwartet, aber der Export-CSV enthält nur den letzten Datensatz. Was mache ich falsch?

War es hilfreich?

Lösung

Sie überschreiben die CSV-Datei mit jeder Schleife Iteration. Ich glaube, die folgende gibt, was Sie nach jeder CSV-Datei unter der Annahme hat nur vier Spalten (d Computer, Benutzer, Datum, Uhrzeit):

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

Andere Tipps

Erstellen Sie ein Array-Variable und fügen Sie jeden $ obj zu. Nach der foreach-Schleife, exportieren Sie das Array von Objekten z.

$arr = @()

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

$arr | Export-csv -path  $users -notype
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top