Criação de objetos personalizados e usar a saída
-
12-09-2019 - |
Pergunta
Estou usando o seguinte para ler uma linha de toda uma carga de arquivos de texto e depois resumir essa informação em um arquivo.
$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 eu executar o código do Write-Output saídas todos os registros como esperado, mas o Export-CSV contém apenas o último registro. O que estou fazendo de errado?
Solução
Você está substituindo o arquivo CSV com cada iteração do loop. Eu acredito o seguinte dá o que você está depois de assumir cada arquivo CSV tem apenas quatro colunas (ou seja computador, usuário, data, hora):
Get-content computers.txt | foreach-object {
import-csv "$computer.txt" -Header $header | Select -first 1
} | Export-csv $users -notype
Outras dicas
Criar uma variável de matriz e adicionar cada $ obj a ele. Depois que o loop foreach, exportar a matriz de objetos v.g.:.
$arr = @()
foreach (...) {
...
$arr += $obj
}
$arr | Export-csv -path $users -notype
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow