Microsoft 365 e powerShell

Acrive Directory in versione web

In fase di sviluppo Non usare In fase di sviluppo

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.

Preliminari

powerShell (pwsh.exe) dovrebbe essere già presente sul sistema; se non è presente dovete attivarlo o, meglio reinstallare l'intero sistema operativo, direi davvero troppo vecchio... Quanto qui scritto utilizza la versione corrente alla data di scrittura del documento, la 7.0.

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

Occorre permettere l'installazione 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 un modulo per l'accesso remoto, operazione piuttosto lunga e che richiede l'accettazione dell'uso di un repository non fidato, sempre come amministratore (nota 5):

PS C:\Users\VincenzoV> Install-Module MSOnline

Utile inoltre:

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

Connettersi ad Office365 remoto

Per collegarsi ad Azure AD (verrò chiesto il login):

Connect-AzureAD

Elencare gruppi e utenti

Esistono due tipi di gruppi di utenti: Sicurezza abilitata alla posta elettronica‎ e Microsoft 365.

Per elencare gli appartenenti ad un gruppo Sicurezza abilitata alla posta elettronica‎ (per esempio alla classe 5TA):

PS C:\Users\VincenzoV> Get-DistributionGroupMember -Identity 5TA

Per operare su un generico gruppo Microsoft 365 (per esempio MioGruppo) occorre preliminarmente conoscere l'ObjectId (nota 6):

Get-AzureADGroup -Filter "DisplayName eq 'MioGruppo'"

ObjectId                             DisplayName Description
--------                             ----------- -----------
f89ce341-9119-4e4c-8510-xxxxxxxxxxxx MioGruppo

Per elencare i membri del gruppo, specificando che si vogliono vedere tutti ed in forma tabellare:

Get-AzureADGroupMember -ObjectId f89ce341-9119-4e4c-8510-xxxxxxxxxxxx -All 1 | Out-GridView

ObjectId                             DisplayName   UserPrincipalName  UserType
--------                             -----------   -----------------  --------
9d44edf5-51a1-4bf7-b41c-xxxxxxxxxxxx ALESSIO       ALESSIO.xxx@yyy.it Member
91abe1e3-4b7b-4df2-af27-xxxxxxxxxxxx ALICE         ALICE.xxx@yyy.it   Member
[...]

Gestione dei Teams

Elencare tutti i Team (potrebbe impiegare molto tempo):

PS C:\Users\VincenzoV> Get-Team

Elencare i Team ai quali in utente appartiene

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

Prevenire il mail forwarding

Esistono molti metodi per inoltrare automaticamente una mail verso un altro indirizzo.

Perché in una scuola, e non solo, ciò è male? Per due ragioni:

Si noti che non necessariamente un inoltro è un problema: per esempio va bene se fatto verso un dominio o un indirizzo oggetto di un contratto con la scuola. 

La responsabilità ovviamente è del singolo, ma qualche forma di educazione ed informazione è necessaria. La tecnica un poco aiuta (nota 2); di seguito un paio di esempi tecnici e una mail tipica da inviare in modo mirato a chi inoltra la posta istituzionale.

ForwardingSmtpAddress

Il seguente script permette di individuare tutti gli utenti che inoltrano tutte le proprie mail. Dope aver fatto il login come amministratore occorre digitare il seguente comando che esporta l'elenco di tutte le mail indicando l'eventuale ForwardingSmtpAddress:

PS C:\Users\VincenzoV> Get-Mailbox –resultSize unlimited | select UserPrincipalName,ForwardingSmtpAddress,DeliverToMailboxAndForward | Export-csv Office365Forwards.csv -NoTypeInformation

Regole

L'inoltro può essere fatto da un utente tramite regole che selettivamente inoltrano solo alcuni messaggio. Preferisco non indagare sulla regola specifica (potrebbe contenere informazioni sensibili), penso basti segnalare all'interessato di stare attento.

Occorre digitare i seguenti comandi,eventualmente messi in uno script:

$mailboxes=get-mailbox –resultSize unlimited
$rules = $mailboxes | foreach { get-inboxRule –mailbox $_.alias }
$rules | where { ( $_.forwardAsAttachmentTo –ne $NULL ) –or ( $_.forwardTo –ne $NULL ) –or ( $_.redirectTo –ne $NULL ) } | ft name,identity,ruleidentity
$rules | where { ( $_.redirectTo –ne $NULL ) } | ft name,identity,ruleidentity

Attenzione: i tempi di esecuzione sono estremamente lunghi e spesso la shell remota va in time-out (occorre digitare nuovamente la password, occasionalmente anche più volte).

Per conoscere velocemente lo stato delle regole di un singolo utente, non solo di inoltro, potrebbe essere utile:

PS C:\Users\Vincenzo Villa> get-inboxRule –mailbox vincenzo.villa
Name         Enabled  Priority     RuleIdentity
----         -------  --------     ------------
picotech     True     1            17348969519720169474
europe.com   True     2            17421027113758097410
FreeRTOS     True     3            17493084707796025346

La mail

Questa potrebbe essere, più o meno, la mail da mandare (nota 3) agli account individuati con i comandi precedenti:

Ciao

Stai ricevendo questa mail perché i messaggi diretti alla tua casella di posta istituzionale sono inoltrati verso una casella personale gestita da aziende private che non hanno sottoscritto con l'IISS Greppi alcun tipo di accordo di riservatezza conforme alla normativa vigente.

Questo espone alla potenziale diffusione di informazioni di natura riservate oltre che facilitare il furto di identità.

In particolare il rischio è molto elevato nel caso di:

Non ci sono problemi legali se l'inoltro è fatto su altre caselle @xxxx.it oppure @yyyy

Per leggere le mail @xyx.edu.it è possibile:

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. Anche se i modi per aggirare i divieti imposti sono tanti...
  3. Mi raccomando: destinatari in CCn oppure mail singole
  4. In genere l'esecuzione degli script è, giustamente, limitata. Per eseguire script locali non firmati: Set-ExecutionPolicy Unrestricted ; per verificare lo stato della policy: Get-ExecutionPolicy
  5. Queste indicazioni scandalose sono presenti nel tutorial ufficiale Microsoft...
  6. Tale procedura vale anche per un gruppo Sicurezza abilitata alla posta elettronica


Data di creazione di questa pagina: aprile 2020
Ultima modifica di questa pagina: 16 aprile 2020


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima