Import-CSV: Lendo arquivos CSV com PowerShell

Você pode usar oImportar-CSVCmdlet do PowerShell para ler o conteúdo de um arquivo CSV. Depois de carregar o conteúdo do arquivo CSV, você obtém um objeto do PowerShell no qual cada coluna do arquivo CSV é uma propriedade separada. Este artigo discute as especificidades da leitura de dados de arquivos CSV usando o cmdlet Import-CSV.

Arquivos CSV são usados ​​para armazenar dados tabulares. Por exemplo, criamos uma planilha Excel simples contendo informações do usuário AD com a seguinte estrutura:ADlogin,Email,Phone,Department. Observe que a primeira linha da planilha contém os nomes das colunas. No PowerShell, estes estarão disponíveis como atributos de objeto na matriz.

Nossa tarefa é importar esse arquivo CSV para o PowerShell e fazer alterações no Active Directory para cada usuário do arquivo.

No artigo anterior, explicamos como usar o cmdlet Export-CSV para salvar objetos do PowerShell em um arquivo CSV.

Leia mais:Importe usuários AD de CSV com PowerShell

Salve este arquivo Excel como um arquivo CSV com valores separados por vírgula. O arquivo de texto resultante deve ficar assim:

Agora, para importar um arquivo CSV para o PowerShell, basta especificar seu nome (caminho):

$ADUsers=Import-CSV -path C:PSmy_ad_users.csv

O cmdlet Import-CSV converte dados de um arquivo CSV em uma matriz do PowerShell.

Se o arquivo CSV usar delimitadores diferentes de vírgulas, você poderá especificá-los com o-Delimitadorparâmetro. Por exemplo, para importar um arquivo CSV com um delimitador de ponto e vírgula (;) use o comando:

$ADUsers=Import-CSV -path C:PSmy_ad_users.csv -Delimiter ";"

Se você usar um caractere de tabulação como delimitador em CSV, poderá especificá-lo da seguinte maneira:-Delimiter `t

Se você quiser usar um delimitador padrão em seu sistema (dependendo do idioma e das configurações regionais do Windows), use o-UseCulturebandeira.

Execute este comando para obter o delimitador padrão do sistema no Windows:

(Get-Culture).TextInfo.ListSeparator

Agora, se você chamar a variável $ADUsers, ela exibirá o conteúdo do seu arquivo CSV. O cmdlet converte o conteúdo do arquivo em uma matriz. Todos os valores do arquivo CSV são representados como linhas.

Se o seu arquivo CSV contiver codificação de caracteres UTF-8, certifique-se de especificar também o tipo UTF8 para evitar erros de codificação:

Import-CSV -path C:PSmy_ad_users.csv -Encoding UTF8

A lista de propriedades de objetos disponíveis pode ser exibida da seguinte forma:

$ADUsers|get-member

Você pode ver que as linhas da matriz contêm PSCustomObjects, cujos elementos podem ser acessados ​​pelos nomes das colunas do seu arquivo CSV.

Você pode exibir todos os valores de uma determinada coluna:

$ADusers.email

Ou os atributos do objeto especificados:

$ADusers| Select-Object Email, Phone

Outra opção útil é acessar diretamente um objeto específico no array. Por exemplo, execute o seguinte comando para obter o valor da linha 4 (a numeração começa em 0):

$ADusers[3]

Se você quiser alterar os atributos dos usuários do Active Directory especificados em seu arquivo CSV, basta usar o loop ForEach para iterar por todas as linhas na matriz $ADUsers (usaremos o cmdlet Set-ADUser do módulo AD PowerShell para fazer as alterações).

# Iterating over all the rows in the array one by one
$ADUsers | ForEach-Object {
# In this example, the $_. statement means we are accessing the current row of the array You can get the value of a particular column from the current row by accessing it by the column name. For example, to display the ADLogin value from the current line:
Write-host $_.ADLogin
# Now we search for a user in AD by the value of the ADLogin column and change its attribute values:
Set-ADUser -Identity $_.AdLogin -MobilePhone $_.Phone –Department $_.Department –EmailAddress $_.Email
}

Você pode substituir este script por um PowerShell one-liner mais compacto:

Import-Csv C:PSmy_ad_users.csv | foreach {Set-ADUser -Identity $_.AdLogin -MobilePhone $_.Phone –Department $_.Department –EmailAddress $_.Email}

Às vezes você pode achar o formato abaixo mais conveniente. Aqui acessamos a linha atual do array através do$Uservariável que definimos na instrução ForEach:

ForEach ($User in $ADUsers){
$samaccountname = $User.ADlogin
$email = $user.Email
Write-host $samaccountname
Write-host $email
}

Em alguns casos, ao processar elementos da matriz a partir de um arquivo CSV, pode ser necessário adicionar uma coluna extra à matriz. Por exemplo, se você quiser adicionar a data atual ao objeto $ADUsers:

$ADUsers | add-member -membertype NoteProperty -name Date -value (Get-Date -Format dd/MM/yyyy)

Aqui estão mais cenários em que você pode usar o cmdlet Import-CSV para executar operações administrativas em um grande número de objetos:

  • Exporte as caixas de correio do Exchange para arquivos PST:
    Import-CSV "C:psuser_to_export_pst.csv" | ForEach {New-MailboxExportRequest -Mailbox $_.username -FilePath $_.UNCPathtoPst
  • Adicione usuários a um grupo de segurança do AD com PowerShell: I
    mport-CSV .users.csv -Header users | ForEach-Object {Add-AdGroupMember -Identity ‘TestADGroup’ -members $_.users}
    Ou um caso semelhante de adição de usuários a um grupo Microsoft Entra ID (Azure AD):
    Import-CSV "C:PSadd_m365_members.csv" | ForEach-Object {
    Add-UnifiedGroupLinks –Identity it_dept –LinkType Members –Links $_.member
    }
  • Obtenha informações sobre o usuário do AD:
    Import-Csv c:psusernsme_list.csv | ForEach {
    Get-ADUser -identity $_.user -Properties Name, telephoneNumber |
    Select Name, telephoneNumber |
    Export-CSV c:psexport_ad_list.csv -Append -Encoding UTF8
    }
    Ou use Set-ADUser para alterar os atributos de usuários específicos:Import-Csv "C:psmodifyad_users.csv" | foreach {Set-ADUser -Identity $_.SamAccountName –Title $_.Title -MobilePhone $_.MobilePhone}Atualize as fotos dos usuários no Active Directory:
    Import-Csv C:PSimport.csv |%{Set-ADUser -Identity $_.AD_username -Replace @{thumbnailPhoto=([byte[]](Get-Content $_.Photo -Encoding byte))}}
  • Crie usuários em massa no Active Directory a partir de uma lista em um arquivo CSV.

Related Posts