<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Erik Szalai</title>
    <description>The latest articles on DEV Community by Erik Szalai (@erikszalai).</description>
    <link>https://dev.to/erikszalai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4228023%2Ffe42148d-71d3-4b63-8c7e-39fdafae71da.png</url>
      <title>DEV Community: Erik Szalai</title>
      <link>https://dev.to/erikszalai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/erikszalai"/>
    <language>en</language>
    <item>
      <title>Offboarding in Active Directory e Microsoft 365: l'ordine giusto (con script PowerShell)</title>
      <dc:creator>Erik Szalai</dc:creator>
      <pubDate>Thu, 05 Nov 2026 08:31:27 +0000</pubDate>
      <link>https://dev.to/erikszalai/offboarding-in-active-directory-e-microsoft-365-lordine-giusto-con-script-powershell-2c37</link>
      <guid>https://dev.to/erikszalai/offboarding-in-active-directory-e-microsoft-365-lordine-giusto-con-script-powershell-2c37</guid>
      <description>&lt;p&gt;Quando un collega lascia l'azienda, l'IT ha due obiettivi in tensione: &lt;strong&gt;togliere l'accesso subito&lt;/strong&gt; e &lt;strong&gt;non perdere nulla di ciò che serve all'azienda&lt;/strong&gt;. Quasi tutti i problemi che ho visto nascono dall'ordine sbagliato delle operazioni.&lt;/p&gt;

&lt;p&gt;Ecco la sequenza che uso in un ambiente ibrido (Active Directory on-premises sincronizzato con Entra ID tramite Entra Connect).&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Blocca l'accesso e revoca le sessioni
&lt;/h2&gt;

&lt;p&gt;Disabilitare l'account non chiude le sessioni già aperte: i token delle app moderne restano validi fino alla scadenza. Serve anche la revoca esplicita.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Microsoft Graph PowerShell&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Connect-MgGraph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Scopes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'User.ReadWrite.All'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Revoke-MgUserSignInSession&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-UserId&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'m.rossi@contoso.it'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In ambiente ibrido l'account va disabilitato in &lt;strong&gt;Active Directory&lt;/strong&gt;, che è la fonte autorevole: il blocco arriva in cloud al ciclo di sincronizzazione successivo.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Reimposta la password
&lt;/h2&gt;

&lt;p&gt;Un valore lungo e casuale, che nessuno conosce, invalida eventuali credenziali salvate o condivise.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Salva i gruppi prima di toglierli
&lt;/h2&gt;

&lt;p&gt;Esporta le appartenenze in CSV: se l'uscita viene annullata, o se il sostituto deve avere gli stessi accessi, le ripristini in un minuto.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-ADUser&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;m.rossi&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Properties&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;MemberOf&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MemberOf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-ADGroup&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;DistinguishedName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;Export-Csv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Gruppi_m.rossi_&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="n"&gt;Get-Date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;yyyyMMdd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.csv"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-NoTypeInformation&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Delimiter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;';'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Encoding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;UTF8&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Converti la mailbox in condivisa PRIMA di togliere la licenza
&lt;/h2&gt;

&lt;p&gt;È l'errore più frequente. Se togli prima la licenza, partono 30 giorni dopo i quali la casella viene eliminata. Una shared mailbox sotto i 50 GB (senza archivio o hold) non richiede licenza.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Connect-ExchangeOnline&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nx"&gt;Set-Mailbox&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Identity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;m.rossi&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;contoso.it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Shared&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Add-MailboxPermission&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Identity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;m.rossi&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;contoso.it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;l.bianchi&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;contoso.it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-AccessRights&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;FullAccess&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Solo dopo aver verificato la conversione rimuovi le licenze.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Controlla inoltri e deleghe
&lt;/h2&gt;

&lt;p&gt;Un inoltro automatico verso un indirizzo personale è una fuga di dati e un potenziale problema GDPR. Controlla sia l'inoltro a livello di casella sia le regole di posta in arrivo.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Sposta l'account e lascia una traccia
&lt;/h2&gt;

&lt;p&gt;Sposta l'utente in un'OU dedicata agli account disabilitati e scrivi nella descrizione data, numero di ticket e operatore. L'eliminazione definitiva solo dopo il periodo di conservazione previsto dalla tua policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Recupera i dispositivi
&lt;/h2&gt;

&lt;p&gt;Per gli smartphone personali usa il &lt;em&gt;retire&lt;/em&gt; di Intune: rimuove solo i dati aziendali.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automatizzare tutto, in sicurezza
&lt;/h2&gt;

&lt;p&gt;Ognuno di questi passaggi si automatizza in PowerShell. Il consiglio più importante: usa &lt;code&gt;SupportsShouldProcess&lt;/code&gt; nei tuoi script, così con &lt;code&gt;-WhatIf&lt;/code&gt; vedi cosa succederebbe prima di farlo davvero.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Trasparenza: ho raccolto gli script completi che uso (offboarding AD e Microsoft 365 con backup dei gruppi, log e -WhatIf) e una checklist stampabile nel &lt;a href="https://szalaierik.gumroad.com/l/kit-sysadmin" rel="noopener noreferrer"&gt;Kit Operativo SysAdmin&lt;/a&gt;, che vendo. Alcuni script sono gratuiti su &lt;a href="https://github.com/ErikSzalai/powershell-sysadmin-ita" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; e c'è un &lt;a href="https://szalaierik.gumroad.com/l/mini-kit-gratis" rel="noopener noreferrer"&gt;mini kit gratuito&lt;/a&gt; con uno script di diagnostica di rete. Tutto in italiano.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>sysadmin</category>
      <category>microsoft</category>
      <category>italian</category>
    </item>
  </channel>
</rss>
