Microsoft 365 e powerShell

Acrive Directory in versione web

In fase di sviluppo Leggere le avvertenze In fase di sviluppo

IN PREPARAZIONE

Microsoft 365 sta diventando popolare nelle scuole e si scontra con il concorrente di sempre G Suite [nota 1]. In questa pagina riporto alcune note disordinate su come gestire molte centinaia di utenti, tipicamente gli studenti di una scuola.

Questa pagina documenta il lavoro iniziato da Raffaele Milani e poi aggiornato nel corso degli anni.

In sintesi:

Preliminari

Windows PowerShell (pwsh.exe) dovrebbe essere già presente sul sistema. Quanto qui scritto utilizza la versione corrente alla data di scrittura del documento, la 7.4.5. Il sistema operativo è Windows 10 oppure Windows 11, entrambi aggiornati alla versione corrente.

Windows PowerShell è presente in due versioni, una come normale linea di comando e l'altra come PowerShell Integrated Scripting Environment (ISE); quest'ultima permette alcune opzioni orientate al debug. Entrambe possono essere utilizzate.

Occorre permettere l'esecuzione di script locali, opzione disattiva per ragioni di sicurezza. Come amministratore in una finestra PS occorre digitare:

PS C:\Users\VincenzoV> Set-ExecutionPolicy Unrestricted

Inoltre occorre installare alcuni moduli per l'accesso remoto, operazione a volte lunga e che richiede l'accettazione dell'uso di un repository non fidato (nota 2); sempre come amministratore:

PS C:\Users\VincenzoV> Install-Module AzureAD -Force
PS C:\Users\VincenzoV> Import-Module AzureAD
PS C:\Users\VincenzoV> Install-Module ExchangeOnlineManagement -Force
PS C:\Users\VincenzoV> Import-Module ExchangeOnlineManagement

Utile inoltre:

PS C:\Users\VincenzoV> Install-Module -Name MicrosoftTeams

Connettersi a Microsoft365 remoto

Per collegarsi ad Azure AD verrò chiesto il login come amministratore del dominio Azure (nota 4):

PS C:\Users\VincenzoV> Connect-AzureAD
Account            Environment TenantId  TenantDomain AccountType
-------            ----------- --------  ------------ -----------
admin@Vv.it        AzureCloud  XXXX-YYYY Vv.it User

Test:

PS C:\Users\VincenzoV> Get-AzureADGroup

Per connettersi a Exchange:

PS C:\Users\VincenzoV> Connect-ExchangeOnline

Test:

PS C:\Users\VincenzoV> Get-DistributionGroupMember -Identity 1IA_studenti

Per connettersi a MSO (nota 4):

PS C:\Users\VincenzoV> Connect-MsolService

Caratteristiche degli utenti

Prima di iniziare, vediamo quali sono i campi principali che andremo ad utilizzare.

Studenti

L'interfaccia web di Azure Active Directory mostra un tipico studente come segue:

Uno studente

Di seguito l'elenco dei campi, relativi ad uno studente, con i nomi mostrati nell'immagine precedente e, in evidenza, con i nomi interni che utilizzeremo negli script:

Inoltre all'interno di Exchange è presente, solo per gli studenti, un attributo personalizzato (customattribute1) contenente il codice fiscale (nota 3):

Codice fiscale

Personale

Un docente

La configurazione di un account appartenente al personale è simile a quella degli studenti, ma evidentemente non contiene alcun riferimento alla classe; neppure contiene il codice fiscale.

Esempi (SALTARE)

Vediamo qualche esempio PowerShell per estrarre informazioni su gruppi ed utenti.

Elencare la mail di tutti gli studenti di quinta, riconoscibili dal fatto che il Department inizia per 5:Lo stesso comando, per gli utenti che non sono studenti:

Get-MsolUser -All | Where-Object {$_.Title -ne "Studente" } | Select-Object UserPrincipalName, FirstName, LastName, DisplayName, Title, Department

I campi di Exchange richiedono un diverso cmdlet. L'esempio seguente ritorna UserPrincipalName e customattribute1, quest'ultimo presente solo per gli studenti. Vengono elencati solo i primi 2 000 utenti (cioè... tutti).

Get-Mailbox -ResultSize 2000 |Where-Object {$_.customattribute1 -ne "" }| Select-Object UserPrincipalName, customattribute1

Per elencare i gruppi Sicurezza abilitata alla posta elettronica‎ ed i rispettivi membri occorre usare un paio di comandi Exchange:

PS C:\Users\Vincenzo Villa> Get-DistributionGroup
Name    DisplayName GroupType                  PrimarySmtpAddress
----    ----------- ---------                  ------------------
DOCENTI DOCENTI     Universal, SecurityEnabled DOCENTI@issgreppi.it
1IK     1IK         Universal, SecurityEnabled 1IK@issgreppi.it

PS C:\Users\Vincenzo Villa> Get-DistributionGroupMember -Identity DOCENTI
Name           RecipientType
----           -------------
vincenzo.villa UserMailbox
gabriele.xyz   UserMailbox

Elencare tutti i Teams (potrebbe impiegare molto tempo):

PS C:\Users\VincenzoV> Get-Team

Elencare i Teams ai quali un utente appartiene:

PS C:\Users\VincenzoV> Get-Team -User vincenzo.villa@xyz

Rimuovere le vecchie classi e creare le nuove

Questa operazione non rimuove utenti o dati, ma solo i gruppi Sicurezza abilitata alla posta elettronica, uno per ciascuna classe. Consiglio di procedere a questa operazione in estate, dopo gli scrutini di giugno e prima di quelli di agosto.

L'elenco (nota 5) può essere ottenuto manualmente, dall'interfaccia web di amministrazione oppure con il comando:

PS C:\Users\Vincenzo Villa> Get-DistributionGroup | Out-GridView

Elenco delle classi da interfaccia web

Questo file va quindi inserito in un file (per esempio gruppi-da-cancellare.csv) ed eseguito il seguente script 50 cancella_gruppi.ps1.

$host.Runspace.ThreadOptions = "ReuseThread"
function Remove-Office365Groups
{# Reading the CSV file
 $bFileExists = (Test-Path $sInputFile -PathType Leaf)
 if ($bFileExists) {
 "Loading $InvFile for processing..."
 $tblDatos = Import-CSV $sInputFile
} else {
 Write-Host "$sInputFile file not found. Stopping the import process!" -foregroundcolor Red
 exit
}
# Deleting the groups
Write-Host "Deleting the Office 365 groups ..." -foregroundcolor Green
foreach ($fila in $tblDatos)
{Write-Host "Deleting group " + $fila.$sColumnName
 Remove-DistributionGroup -Identity $fila.$sColumnName -BypassSecurityGroupManagerCheck
}
Write-Host "-----------------------------------------------------------" -foregroundcolor Green
Write-Host "All the group have been deleted. The processs is completed." -foregroundcolor Green
Write-Host "-----------------------------------------------------------" -foregroundcolor Green
}
######### main ###########
$ScriptDir = Split-Path -parent $MyInvocation.MyCommand.Path
$sInputFile=$ScriptDir+ "\gruppi-da-cancellare.csv"
$sColumnName="gruppo"
Remove-Office365groups

Gruppi classi da rimuovere e creare

Ovviamente è possibile anche cancellare i gruppi manualmente, uno ad uno...

Successivamente occorre creare i nuovo gruppi classe (file gruppi-da-creare.csv, da documenti della segreteria) ed eseguire lo script 60 crea gruppi.ps1.

 Nell'assegnare il nome, consiglio di mettere in evidenza il fatto di esplicitare che si tratta di un gruppo di studenti, per esempio nominando il gruppo 1TA_studenti e non semplicemente 1TA come mostrato in alcune delle vecchie immagini presenti in questa pagina.

$host.Runspace.ThreadOptions = "ReuseThread"
function CreaGruppi
{$bFileExists = (Test-Path $sInputFile -PathType Leaf)
 if ($bFileExists) {
 "Loading $InvFile for processing..."
 $tblDatos = Import-CSV $sInputFile
} else { Write-Host "$sInputFile file not found. Stopping the import process!" -foregroundcolor Red
 exit
}
foreach ($fila in $tblDatos)
{"Group: " + $fila.$sColumnName
 new-distributiongroup -name $fila.$sColumnName -alias $fila.$sColumnName -type "security" -primarysmtpaddress  ($fila.$sColumnName + "@issgreppi.it")
}
Write-Host "-----------------------------------------------------------" -foregroundcolor Green
Write-Host "The processs is completed." -foregroundcolor Green
Write-Host "-----------------------------------------------------------" -foregroundcolor Green
}
$ScriptDir = Split-Path -parent $MyInvocation.MyCommand.Path
$sInputFile=$ScriptDir+"\gruppi-da-creare.csv"
$sColumnName="gruppo"
######## main ##########
CreaGruppi

Ovviamente è possibile anche creare i gruppi manualmente, uno ad uno...

Cancellare gli utenti

Prima di cancellare un utente è VIVAMENTE consigliato avvisarlo con opportuno preavviso.

Gli utenti possono essere cancellati:

Bulk create

Gli utenti più facili da rimuovere sono gli studenti di quinta, dopo gli esami, escludendo manualmente i, si spera pochi, pochi bocciati. Per ricavare le mail di tali utenti è sufficiente esportare gli utenti dall'interfaccia WEB oppure usare il seguente comando powershell: 

PS C:\Users\Vincenzo Villa> Get-MsolUser -All -Title "Studente" | Where-Object {$_.Department.startswith("5")} | Select-Object UserPrincipalName
UserPrincipalName
-----------------
aaa.bbb@issgreppi.it
Paolo.Rossi@issgreppi.it

Se, come spesso succede, tale elenco deve essere importato in un foglio di lavoro è utile il cmdlet Out-GridView al termine, dopo un |.

Altri utenti da cancellare sono coloro che cambiano scuola al termine dell'anno o non proseguono più gli studi. Tale elenco può essere ricavato a partire dal foglio di calcolo presentato qui sotto.

Creare nuovi utenti (classi prime)

Questa operazione è FACOLTATIVA e serve per avere un elenco parziale degli studenti iscritti ad alcuni corsi che attiviamo nei primissimi giorni di settembre. Tipicamente si tratta degli studenti delle future classi prime. Se possibile va fatta dopo la cancellazione delle quinte (per ridurre le omonimie).

Per creare le utenze per gli studenti della prima classe occorre partire dai seguenti dati:

PS C:\Users\Vincenzo Villa> Get-Mailbox -ResultSize 2000 |Where-Object {$_.customattribute1 -ne "" }| Select-Object UserPrincipalName, customattribute1 | Out-GridView

Serve poi il foglio di calcolo allegato:

  1. Inserire nel primo foglio Nome, Cognome, Classe e Codice Fiscale come da file della segreteria, nelle apposite colonne. Una delle colonne è calcolata e, per gli studenti non ripetenti, conterrà #N/D
  2. Inserire nel secondo foglio Mail e Codice Fiscale presenti in Azure, nelle apposite colonne. Tre colonne saranno calcolate e, per gli studenti non ripetenti, conterranno #N/D
  3. Verificare che nel terzo foglio siano presenti un numero di righe pari al numero di studenti di prima, come nel file della segreteria. I nuovi indirizzi mail sono calcolati a partire dal nome. Gli indirizzi evidenziati sono duplicati a causa delle omonimie e quindi vanno corretti manualmente, per esempio aggiungendo l'anno di nascita.
  4. Sempre nel terzo foglio, dopo le righe pre-calcolate, inserire nella colonna delle mail tutte le mail presenti nel dominio Controllare nuovamente le mail duplicate (evidenziate), trascurando quelle degli studenti ripetenti
  5. Esportare il file studenti-aggiorna.csv
  6. Eseguire lo script 70 aggiorna anagrafica studenti.ps1 in modalità CREA, per creare gli utenti
  7. Eseguire lo script 70 aggiorna anagrafica studenti.ps1 in modalità AGGIUNGIALGRUPPO, per aggiungere gli utenti alla classe

Creare nuovi utenti

TODO

Note

  1. Non intendo qui discutere se sia giusto o meno cedere la libertà di docenti e studenti ad una multinazionale solo perché fornisce gratuitamente un servizio. Dico solo che sono servizi comodi...
  2. Queste indicazioni scandalose sono presenti nel tutorial ufficiale Microsoft...
  3. La ragione è storica; penso prossimamente di cambiare questa impostazione
  4. I moduli di PowerShell Azure AD e MSOnline sono deprecati a partire dal 30 marzo 2024
  5. Non tutti i gruppi Sicurezza abilitata alla posta elettronica sono classi. La selezione è, banalmente, manuale...


Data di creazione di questa pagina: aprile 2020
Ultima modifica di questa pagina: 23 agosto 2024


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima