La creación de objetos personalizados y el uso de la salida
-
12-09-2019 - |
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?
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