Question

J'utilise ce qui suit pour lire une ligne à partir d'une charge entière des fichiers texte, puis résumer ces informations dans un seul fichier.

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

Quand je lance le code Write-sortie des sorties tous les enregistrements comme prévu, mais le seul Export-CSV contient le dernier enregistrement. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Vous écrasez le fichier csv à chaque itération de la boucle. Je crois que ce qui suit donne ce que vous êtes après avoir pris chaque fichier csv n'a que quatre colonnes (i.e. Computer, utilisateur, date, heure):

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

Autres conseils

Créer une variable tableau et ajouter chaque obj $ à lui. Après la boucle foreach, exporter le tableau d'objets par exemple:.

$arr = @()

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

$arr | Export-csv -path  $users -notype
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top