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

Se você precisa enviar informações do PowerShell para um arquivo CSV, o cmdlet Export-CSV está aqui para ajudar. Este cmdlet economiza muito tempo dos administradores organizando textos soltos 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 mais a partir de qualquer objeto PowerShell com o cmdlet Export-Csv.

O formato CSV é apenas uma lista separada por vírgulas de linhas armazenadas como um arquivo de texto. Já que é apenas um arquivo de texto, nós poderíamos tecnicamente apenas usar um comando de arquivo de texto genérico como Set-Content para fazer o trabalho. Porém, usar um comando genérico exigiria construir a estrutura CSV necessária por nós mesmos. Por que fazer isso quando temos um comando de exportação CSV já 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 para arquivos CSV é o que torna este cmdlet do PowerShell tão útil.

Gerencie e Relate o Active Directory, Exchange e Microsoft 365 com ManageEngine ADManager Plus. Baixe a Versão de 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 o Export-Csv, ele criará um arquivo CSV com duas colunas e uma única linha. Você então pode 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 basicamente trata um objeto em memória e um arquivo CSV da mesma maneira! Ele também entende que os rótulos das colunas devem ser cabeçalhos. Exportar objetos usando esse cmdlet é como salvar o objeto no sistema de arquivos. Usando o comando de texto genérico do PowerShell Get-Content, podemos inspecionar o texto bruto para ver o que o comando Export-Csv exportou.

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

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

Observe que o comando usa as aspas duplas ao redor 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 exporta o tipo de objeto que criou o arquivo CSV. Se você preferir não ver esta linha, um parâmetro popular é NoTypeInformation, que elimina completamente esta linha.

Se você trabalha com vários arquivos CSV diferentes ou fontes de dados, pode aprender da maneira difícil que o Export-CSV sobrescreve arquivos existentes. Mas não há 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, você pode precisar criar um arquivo CSV que não use o separador de lista usual (vírgula) para separar os campos. Em vez disso, talvez precise criar um arquivo com muitos dados que use abas como separadores ou talvez até mesmo ponto e vírgulas. O cmdlet PowerShell Export-Csv também pode nos ajudar com isso, especificando o delimitador que precisamos.

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

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

Lidando com aspas

Ao criar linhas CSV, o Export-Csv coloca todos os campos entre aspas. Em algumas situações, isso pode não ser desejável. Infelizmente, não há como 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. Em seguida, Get-Content lê o arquivo de texto bruto, substitui todas as aspas duplas na memória por nada. Então Set-Content escreve essas informações na memória de volta no 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 o Microsoft 365 com o ManageEngine ADManager Plus. Baixe a Avaliação Gratuita!

Resumo

O cmdlet Export-Csv é uma ferramenta simples, porém extremamente útil, para gerenciar dados em formato 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/