Puoi usare ilImporta-CSVCmdlet di PowerShell per leggere il contenuto di un file CSV. Una volta caricato il contenuto del file CSV, ottieni un oggetto PowerShell in cui ciascuna colonna del file CSV è una proprietà separata. In questo articolo vengono illustrate le specifiche della lettura dei dati dai file CSV utilizzando il cmdlet Import-CSV.
I file CSV vengono utilizzati per archiviare dati tabulari. Ad esempio, abbiamo creato un semplice foglio di calcolo Excel contenente le informazioni sull'utente AD con la seguente struttura:ADlogin,Email,Phone,Department. Tieni presente che la prima riga del foglio di calcolo contiene i nomi delle colonne. In PowerShell, questi saranno disponibili come attributi dell'oggetto nell'array.
Il nostro compito è importare questo file CSV in PowerShell e apportare modifiche ad Active Directory per ciascun utente dal file.
Nell'articolo precedente abbiamo spiegato come utilizzare il cmdlet Export-CSV per salvare gli oggetti PowerShell in un file CSV.
Leggi anche:Come utilizzare Export-CSV in PowerShell

Salva questo file Excel come file CSV con valori separati da virgole. Il file di testo risultante dovrebbe assomigliare a questo:


Adesso, per importare un file CSV in PowerShell, non devi fare altro che specificarne il nome (percorso):
$ADUsers=Import-CSV -path C:PSmy_ad_users.csv
Il cmdlet Import-CSV converte i dati da un file CSV in una matrice di PowerShell.
Se il file CSV utilizza delimitatori diversi dalle virgole, puoi specificarli con l'estensione-Delimitatoreparametro. Ad esempio, per importare un file CSV con un delimitatore punto e virgola (;) utilizzare il comando:
$ADUsers=Import-CSV -path C:PSmy_ad_users.csv -Delimiter ";"
Se utilizzi un carattere di tabulazione come delimitatore in CSV, puoi specificarlo come segue:-Delimiter `t
Se desideri utilizzare un delimitatore predefinito nel tuo sistema (a seconda della lingua e delle impostazioni regionali di Windows), utilizza il file-UseCulturebandiera.
Esegui questo comando per ottenere il delimitatore predefinito del sistema in Windows:
(Get-Culture).TextInfo.ListSeparator
Ora se chiami la variabile $ADUsers, verrà visualizzato il contenuto del tuo file CSV. Il cmdlet converte il contenuto del file in una matrice. Tutti i valori del file CSV sono rappresentati come righe.
Se il tuo file CSV contiene la codifica dei caratteri UTF-8, assicurati di specificare anche il tipo UTF8 per evitare errori di codifica:
Import-CSV -path C:PSmy_ad_users.csv -Encoding UTF8
L'elenco delle proprietà dell'oggetto disponibili può essere visualizzato come segue:
$ADUsers|get-member
Puoi vedere che le righe dell'array contengono PSCustomObjects, i cui elementi sono accessibili tramite i nomi delle colonne dal tuo file CSV.

Puoi visualizzare tutti i valori da una determinata colonna:
$ADusers.email
Oppure gli attributi dell'oggetto specificati:
$ADusers| Select-Object Email, Phone


Un'altra opzione utile è accedere direttamente a un oggetto specifico nell'array. Ad esempio, esegui il comando seguente per ottenere il valore della riga 4 (la numerazione inizia da 0):
$ADusers[3]


Se desideri modificare gli attributi degli utenti di Active Directory che hai specificato nel file CSV, utilizza semplicemente il ciclo ForEach per scorrere tutte le righe nell'array $ADUsers (utilizzeremo il cmdlet Set-ADUser dal modulo AD PowerShell per apportare le modifiche).
# 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
}
Puoi sostituire questo script con un one-liner di PowerShell più compatto:
Import-Csv C:PSmy_ad_users.csv | foreach {Set-ADUser -Identity $_.AdLogin -MobilePhone $_.Phone –Department $_.Department –EmailAddress $_.Email}
A volte potresti trovare più conveniente il formato seguente. Qui accediamo alla riga corrente dell'array tramite il file$Uservariabile che abbiamo definito nell'istruzione ForEach:
ForEach ($User in $ADUsers){
$samaccountname = $User.ADlogin
$email = $user.Email
Write-host $samaccountname
Write-host $email
}
In alcuni casi, quando si elaborano gli elementi dell'array da un file CSV, potrebbe essere necessario aggiungere una colonna aggiuntiva all'array. Ad esempio, se desideri aggiungere la data corrente all'oggetto $ADUsers:
$ADUsers | add-member -membertype NoteProperty -name Date -value (Get-Date -Format dd/MM/yyyy)


Di seguito sono riportati altri scenari in cui è possibile utilizzare il cmdlet Import-CSV per eseguire operazioni amministrative su un numero elevato di oggetti:
- Esporta le caselle di posta di Exchange in file PST:
Import-CSV "C:psuser_to_export_pst.csv" | ForEach {New-MailboxExportRequest -Mailbox $_.username -FilePath $_.UNCPathtoPst - Aggiungere utenti a un gruppo di sicurezza AD con PowerShell: I
mport-CSV .users.csv -Header users | ForEach-Object {Add-AdGroupMember -Identity ‘TestADGroup’ -members $_.users}
O un caso simile di aggiunta di utenti a un gruppo Microsoft Entra ID (Azure AD):Import-CSV "C:PSadd_m365_members.csv" | ForEach-Object {
Add-UnifiedGroupLinks –Identity it_dept –LinkType Members –Links $_.member
} - Ottieni informazioni sull'utente da AD:
Import-Csv c:psusernsme_list.csv | ForEach {Oppure utilizza Set-ADUser per modificare gli attributi di utenti specifici:
Get-ADUser -identity $_.user -Properties Name, telephoneNumber |
Select Name, telephoneNumber |
Export-CSV c:psexport_ad_list.csv -Append -Encoding UTF8
}Import-Csv "C:psmodifyad_users.csv" | foreach {Set-ADUser -Identity $_.SamAccountName –Title $_.Title -MobilePhone $_.MobilePhone}Aggiorna le foto degli utenti in Active Directory:Import-Csv C:PSimport.csv |%{Set-ADUser -Identity $_.AD_username -Replace @{thumbnailPhoto=([byte[]](Get-Content $_.Photo -Encoding byte))}} - Crea utenti in blocco in Active Directory da un elenco in un file CSV.














