Exportar-Csv: Converter Objetos em Arquivos CSV de Forma Eficiente

Se precisar enviar informações do PowerShell para um arquivo CSV, o cmdlet Export-CSV está aqui para ajudar. Este cmdlet economiza muito tempo para os administradores ao lidar com texto solto e convertê-lo em um formato estruturado. Em vez de mexer com o Excel, podemos usar o PowerShell para criar arquivos CSV.

Você pode criar arquivos CSV para alimentar relatórios, enviar para bancos de dados e muito mais a partir de qualquer objeto do PowerShell com o cmdlet Export-Csv.

O formato CSV é simplesmente uma lista de linhas separadas por vírgulas armazenadas como um arquivo de texto. Como é apenas um arquivo de texto, teoricamente podemos usar um comando genérico de arquivo de texto como Set-Content para fazer o trabalho. No entanto, usar um comando genérico exigiria a construção da estrutura CSV necessária. Por que fazer isso quando já temos um comando de exportação CSV em Export-Csv para enviar a saída CSV para um arquivo?

Arquivos CSV precisam de uma estrutura específica. A capacidade deste cmdlet de entender, ler e transformar informações em arquivos CSV é o que torna este cmdlet do PowerShell tão útil.

Gerencie e Relate o Active Directory, Exchange e o Microsoft 365 com o ManageEngine ADManager Plus. Baixe a avaliação gratuita!

Objetos -eq Linhas CSV

O cmdlet Export-Csv tem um único propósito; salvar objetos do PowerShell em um arquivo CSV.

Vamos dizer que você tenha um objeto com duas propriedades chamadas foo e bar. Cada uma dessas propriedades tem valores respectivos de 1 e 2. Quando você envia esse objeto para Export-Csv, ele criará um arquivo CSV com duas colunas e uma única linha. Você pode então importar o conteúdo do CSV e inspecionar como ele se parece.

PS> $testObject = [pscustomobject]@{'foo' = 1; 'bar' = 2}
PS> $testObject | Export-Csv -Path C:\TestObject.csv
PS> $testObject
foo	bar
1 	2
PS> Import-Csv -Path C:\TestObject.csv
foo	bar
1  	2

O PowerShell trata essencialmente um objeto na memória e um arquivo CSV da mesma forma! Ele também diz que os rótulos das colunas devem ser cabeçalhos. Exportar objetos usando este cmdlet é como salvar o objeto no sistema de arquivos. Usando o comando de texto genérico PowerShell Get-Content, podemos inspecionar o texto bruto para ver o que o comando Export-Csv exportou.

PS> Get-Content -Path C:\TestObject.csv

#TYPE System.Management.Automation.PSCustomObject
"foo","bar" "1","2"

Observe que o comando usa aspas duplas em torno de cada entrada de linha. Isso permite incluir campos com espaços também.

Parâmetros Úteis do Export-CSV

No Windows PowerShell 5.1, o cmdlet Export-CSV exibe o tipo de objeto que criou o arquivo CSV. Se preferir não ver esta linha, um parâmetro popular é NoTypeInformation, que elimina completamente esta linha.

Se trabalha com muitos arquivos CSV ou fontes de dados diferentes, pode aprender da maneira difícil que Export-CSV sobrescreve arquivos existentes. Sem problema se estiver usando o parâmetro Append. O parâmetro Append permite adicionar linhas ao CSV em vez de sobrescrever um arquivo existente.

Outro parâmetro útil é o Delimiter. Ocasionalmente, pode precisar criar um arquivo CSV que não utilize o separador de lista usual (vírgula) para separar os campos. Talvez precise criar um arquivo com muitos dados que usam tabulações como separadores ou até mesmo ponto e vírgulas. O cmdlet PowerShell Export-Csv pode nos ajudar com isso ao especificar o delimitador que precisamos.

PS> $testObject | Export-Csv -Path C:\TestObject.csv -Delimiter "`t"
PS> Get-Content -Path C:\TestObject.csv

#TIPO System.Management.Automation.PSCustomObject
"foo"   "bar" "1"     "2"

Lidando com Aspas

Ao criar linhas CSV, Export-Csv coloca todos os campos entre aspas. Em algumas situações, isso pode não ser desejável. Infelizmente, não há maneira de evitar isso. Mas, usando um pouco mais de código, é possível fazer acontecer.

Abaixo você pode ver um exemplo de criação do arquivo CSV. Então, Get-Content lê o arquivo de texto bruto, substitui todas as aspas duplas na memória por nada. Em seguida, Set-Content escreve essas informações da memória de volta para o disco.

$testObject | Export-Csv -Path C:\TestObject.csv
(Get-Content -Path C:\TestObject.csv -Raw).replace('"','') | Set-Content -Path C:\TestObject.csv

Gerencie e Relate o Active Directory, Exchange e Microsoft 365 com o ManageEngine ADManager Plus. Baixe o Teste Grátis!

Resumo

O cmdlet Export-Csv é uma ferramenta simples, mas extremamente útil para gerenciar dados CSV. Ele pode entender a estrutura de um arquivo de dados CSV e transformar objetos PowerShell em linhas CSV.

I’m not about to go back to batch, or VBScript where creating a CSV file from an existing object required instantiating a FileSystemObject, creating a loop and a bunch of Write() methods!

Este comando é mais um ótimo motivo para começar a escrever código PowerShell hoje!

Source:
https://adamtheautomator.com/export-csv/