Domanda

Sto usando il seguente per leggere una riga da un intero carico di file di testo e quindi sintesi di tali dati in un unico file.

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

Quando eseguo il codice uscite Write-Output tutti i record come previsto, ma l'Export-CSV contiene solo l'ultimo record. Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Si sovrascrivere il file CSV con ogni iterazione del ciclo. Credo che il seguente dà quello che stai dopo assumendo ogni file CSV ha solo quattro colonne (cioè computer, utente, data, ora):

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

Altri suggerimenti

Creare una variabile di array e aggiungere ogni $ obj ad esso. Dopo il ciclo foreach, esportare l'array di oggetti per esempio:.

$arr = @()

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

$arr | Export-csv -path  $users -notype
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top