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:
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
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
Prima di iniziare, vediamo quali sono i campi principali che andremo ad utilizzare.
L'interfaccia web di Azure Active Directory mostra un tipico studente come segue:
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):
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.
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
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
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
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...
Prima di cancellare un utente è VIVAMENTE consigliato avvisarlo con opportuno preavviso.
Gli utenti possono essere cancellati:
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.
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:
TODO
Data di creazione di questa pagina: aprile 2020
Ultima modifica di questa pagina: 23 agosto 2024
Il taccuino tecnico - Permanentemente in fase di
riscrittura
Copyright 2013-2024, Vincenzo Villa (https://www.vincenzov.net)
Quest'opera è stata rilasciata con licenza Creative Commons | Attribuzione 4.0 Internazionale (CC BY 4.0)