{"id":378135,"date":"2024-10-31T13:47:24","date_gmt":"2024-10-31T13:47:24","guid":{"rendered":"https:\/\/www.ninjaone.com\/?post_type=script_hub&#038;p=378135"},"modified":"2024-10-31T13:47:24","modified_gmt":"2024-10-31T13:47:24","slug":"importare-gli-utenti-in-active-directory-da-un-csv","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/it\/script-hub\/importare-gli-utenti-in-active-directory-da-un-csv\/","title":{"rendered":"Come importare gli utenti in Active Directory da un file CSV utilizzando PowerShell"},"content":{"rendered":"<p>Una delle applicazioni pi\u00f9 comuni di PowerShell che vengono utilizzate dai professionisti IT \u00e8 la sincronizzazione delle informazioni con Active Directory (AD). Sembra che tutti abbiano una fonte di dati esterna correlata ad alcuni dipendenti che bisogna inserire in AD. Ci\u00f2 \u00e8 prevedibile perch\u00e9 AD \u00e8 in genere il servizio IT pi\u00f9 utilizzato nelle organizzazioni e fornisce un&#8217;eccellente funzionalit\u00e0 non solo come autenticazione, ma anche come archivio di informazioni sui dipendenti.<\/p>\n<p>Anche se i tuoi dati sono archiviati in un database SQL personalizzato o in un sistema HR di ultima generazione, \u00e8 spiacevole dover verificare due fonti se hai bisogno di informazioni come il dipartimento del dipendente, i gruppi di cui il dipendente dovrebbe far parte e cos\u00ec via. Quando inizi a sincronizzare i dati, il sistema di origine pu\u00f2 cambiare schema, API, server e cos\u00ec via, il che comporta una rielaborazione del codice. Per assicurarti che l&#8217;origine dei dati da cui stai effettuando la sincronizzazione rimanga sempre la stessa e possa essere facilmente creata da qualsiasi sistema, \u00e8 opportuno che i dati vengano inseriti in un file CSV.<\/p>\n<p>Un semplice file CSV pu\u00f2 essere esportato da qualsiasi software o database e, in questo formato, l&#8217;amministratore dispone di una copia che pu\u00f2 modificare se necessario, evitando cos\u00ec le richieste di un altro team di modificare un database da qualche parte.<\/p>\n<p><!--more--><\/p>\n<p>Procediamo con un semplice script che puoi usare oggi per importare gli utenti in Active Directory da un file CSV.<\/p>\n<p>Per cominciare, supponiamo di avere un CSV chiamato C:Employees.csv. Il CSV ha tre colonne: Nome, Cognome e Reparto. Desideri uno script che trovi l&#8217;account AD associato a quel nome\/cognome e che modifichi il reparto in quello indicato nel CSV.<\/p>\n<p>Questo script, come ogni script di sincronizzazione, sar\u00e0 composto principalmente da tre &#8220;fasi&#8221;. Le &#8220;fasi&#8221; sono la lettura dei dati di origine (CSV in questo esempio), la ricerca dell&#8217;ID univoco dei dati di origine di destinazione che corrisponde ai dati di origine (AD samAccountName in questo esempio) e infine la scrittura degli attributi associati legati a quell&#8217;account.<\/p>\n<p>Il primo passo \u00e8 la lettura del file CSV.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$csvUsers = Import-Csv -Path 'C:Employees.csv'<\/pre>\n<p>Fatto. La parte successiva consiste nel trovare l&#8217;ID univoco da abbinare a ogni riga del file CSV. Poich\u00e9 non abbiamo l&#8217;ID univoco all&#8217;interno del CSV, dobbiamo costruirne uno all\u2019istante. Per ottenere questo ID univoco, supporremo che l&#8217;iniziale del nome e il cognome di un dipendente corrispondano sempre a un nome di account AD samAccountName. Dovremo creare questa ricerca samAccountName e poi eseguire una query AD per vedere se esiste un account.<br \/>\nNota: Prima di andare avanti, assicurati di aver scaricato e installato gli <a href=\"https:\/\/learn.microsoft.com\/en-us\/troubleshoot\/windows-server\/system-management-components\/remote-server-administration-tools\" target=\"_blank\" rel=\"noopener\">Strumenti di amministrazione del server remoto<\/a> per il tuo sistema operativo. In questo modo otterrai il modulo PowerShell di Active Directory contenente le cmdlet Get-AdUser e Set-AdUser che utilizzeremo.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">foreach ($csvUser in $csvUsers) {\r\n    $userName = '{0}{1}' -f $csvUser.FirstName.SubString(0,1),$csvUser.LastName\r\n    if ($adUser = Get-AdUser -Filter \"samAccountName -eq $userName\" -Properties $attributesToSync) {\r\n        ## Il nostro \"ID unico\" \u00e8 stato trovato. Procedi alla lettura dei dati CSV e alla scrittura degli attributi\r\n    } else {\r\n        Write-Warning -Message 'Corrispondenza utente non trovata'\r\n    }\r\n}<\/pre>\n<p>Una volta ottenuto un account AD con cui lavorare, possiamo leggere ogni attributo associato al nome del dipendente nel file CSV e scrivere le informazioni nell&#8217;account AD trovato. Di seguito si pu\u00f2 notare che si sta definendo la variabile $attributesToSync, per poi leggerla in un secondo momento. In questo modo \u00e8 possibile aggiungere altri attributi che potrebbero essere presenti nel CSV per sincronizzare anche quelli in futuro. L&#8217;esempio seguente verifica innanzitutto se l&#8217;attributo \u00e8 lo stesso. In caso contrario, si utilizza Set-AdUser per cambiarlo.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$attributesToSync = 'Dipartimento'\r\nforeach ($csvUser in $csvUsers) {\r\n    $userName = '{0}{1}' -f $csvUser.FirstName.SubString(0,1),$csvUser.LastName\r\n    if ($adUser = Get-AdUser -Filter \"samAccountName -eq $userName\" -Properties $attributesToSync) {\r\n        foreach ($attr in $attributesToSync) {\r\n            if ($csvUser.$_ -ne $adUser.$_) {\r\n                $setParams = @{$_ = $csvUser.$_}\r\n                $adUser | Set-AdUser @setParams\r\n            }\r\n        }\r\n    } else {\r\n        Write-Warning -Message 'Corrispondenza utente non trovata'\r\n    }\r\n}<\/pre>\n<p>Questo esempio funziona solo con gli attributi che sono valori stringa all&#8217;interno di AD. Presta attenzione agli attributi come il gestore, la data di scadenza dell&#8217;account e cos\u00ec via. Questi attributi richiedono la costruzione di un oggetto del tipo corretto prima di essere scritti in AD. Ci vorrebbe un&#8217;altra serie di articoli per esaminare le complessit\u00e0 della sincronizzazione di AD e del lavoro con i diversi attributi, ma abbiamo creato un PowerShell chiamato PSADSync che ti assister\u00e0 in questo senso. Puoi trovarlo estraendolo dalla Galleria PowerShell con <a href=\"https:\/\/www.powershellgallery.com\/packages\/PSADSync\/1.2.88\" target=\"_blank\" rel=\"noopener\">Install-Module PSADSync<\/a>.<\/p>\n<p><em>Adam Bertram \u00e8 un MVP di Microsoft Windows Cloud e Datacenter Management ed \u00e8 autore di vari corsi di formazione, collabora regolarmente a numerose pubblicazioni cartacee e online e presenta a vari gruppi di utenti e conferenze. Puoi trovare Adam all&#8217;indirizzo <a href=\"https:\/\/adamtheautomator.com\/\" target=\"_blank\" rel=\"noopener\">adamtheautomator.com<\/a> o su Twitter all&#8217;indirizzo @adbertram.<\/em><\/p>\n","protected":false},"author":9,"featured_media":0,"parent":0,"menu_order":535,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"no","_lmt_disable":""},"operating_system":[4212],"use_cases":[4277],"class_list":["post-378135","script_hub","type-script_hub","status-publish","hentry","script_hub_category-windows","use_cases-gestione-degli-utenti-e-degli-accessi"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/script_hub\/378135","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/comments?post=378135"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/media?parent=378135"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/operating_system?post=378135"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/use_cases?post=378135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}