Pregunta

Estoy usando el siguiente para leer una línea que conecta una carga completa de archivos de texto y luego síntesis de esa información en un archivo.

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

Al ejecutar el código de las salidas Write-Output todos los registros como se esperaba, pero el Export-CSV sólo contiene el último registro. ¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Está sobrescribiendo el archivo csv con cada iteración del bucle. Creo que el siguiente da lo que está después de asumir cada archivo csv sólo tiene cuatro columnas (es decir, equipo, usuario, fecha, hora):

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

Otros consejos

Crea una variable de matriz y agregar cada $ obj a ella. Después de que el bucle foreach, exportar la matriz de objetos por ejemplo:.

$arr = @()

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

$arr | Export-csv -path  $users -notype
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top