- È fondamentale preparare l'ambiente (versioni di Windows, PowerShell, .NET e criteri di esecuzione) e assegnare i ruoli appropriati in Microsoft 365 prima di utilizzare PowerShell.
- I moduli moderni (ExchangeOnlineManagement, Microsoft.Graph, SharePoint Online e MicrosoftTeams) consentono di connettersi a più servizi in un'unica sessione con autenticazione moderna e autenticazione a più fattori (MFA).
- L'uso corretto dei certificati, delle identità gestite e della chiusura esplicita della sessione migliora la sicurezza, evita i limiti di sessione e facilita l'automazione non presidiata.
- La maggior parte degli errori di connessione si risolve verificando i moduli installati, le autorizzazioni RBAC, la compatibilità TLS e le impostazioni del proxy o del firewall.
Se gestisci quotidianamente Microsoft 365/Office 365, ti accorgerai presto che farlo esclusivamente tramite il centro di amministrazione rappresenta un collo di bottiglia. PowerShell diventa il coltellino svizzero per la gestione automatizzata e su larga scala di caselle di posta, utenti, siti SharePoint, Teams e criteri di sicurezza.
Il problema è che molti amministratori si ritrovano con quattro o cinque finestre di PowerShell aperte contemporaneamente: una per Exchange Online, una per SharePoint Online, una per Teams, una per Microsoft Graph e così via. Questo approccio è macchinoso, difficile da gestire e inefficiente . In questa guida, vedremo come preparare l'ambiente e connettersi a più servizi di Office 365 da una o poche sessioni di PowerShell , utilizzando moduli moderni e le migliori pratiche di sicurezza.
Prerequisiti e preparazione dell'ambiente
Prima di iniziare a digitare comandi a raffica, assicurati che il computer che utilizzi per l'amministrazione soddisfi i requisiti minimi di sistema, di rete e di sicurezza . Saltare questo passaggio potrebbe causare errori incomprensibili come "cmdlet non riconosciuto", "impossibile caricare il file" o problemi di autenticazione.
Per quanto riguarda il sistema operativo , è necessaria una versione a 64 bit di Windows. I sistemi operativi supportati includono, a titolo esemplificativo ma non esaustivo:
- Windows 11 e Windows 10
- Windows 8/8.1 e Windows 7 SP1
- Windows Server 2012, 2012 R2, 2016, 2019 e 2022
Su questi dispositivi, la versione consigliata è PowerShell 5.1 o PowerShell 7+Se stai utilizzando Windows PowerShell 5.1, assicurati di avere .NET Framework 4.7.2 o superiore installato e il modulo PowerShellGet aggiornato, poiché questo è ciò che consente Installa i moduli moderni da PowerShell Gallery con molto comodo Install-Module.
A livello di rete, è necessario disporre dell'accesso HTTPS (TCP 443) ai domini Microsoft 365, come ad esempio:
- outlook.office365.com (Scambio online)
- login.microsoftonline.com (autenticazione)
- graph.microsoft.com (Grafico Microsoft)
- *.office365.com, *.microsoft.com in scenari più restrittivi
Se ti trovi in un ambiente con un firewall o un proxy aziendale, verifica con il team di rete che questi endpoint non vengono filtratiUn semplice Test-NetConnection outlook.office365.com -Port 443 Consente di verificare la connettività di base.
Un altro elemento chiave è la politica di esecuzione degli script . Molti moduli caricano script locali o remoti e, se la politica è troppo restrittiva, questi verranno bloccati.
Get-ExecutionPolicyper visualizzare il valore corrente.- Firmato a distanza Questo è il punto di equilibrio più comune: consente l'utilizzo di script locali non firmati e richiede la firma digitale per gli script scaricati da Internet.
Per impostarlo solo per l'utente corrente:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
In alcuni ambienti , si preferisce AllSigned , oppure, in casi di test molto specifici, Unrestricted o Process-Level Bypass . Il punto fondamentale è capire che senza modificare questa impostazione, non sarà possibile importare sessioni o eseguire script di connessione.
Ruolo di amministratore e autorizzazioni richieste
Indipendentemente da quanto sia ben configurato il tuo ambiente, se l'account con cui ti connetti non dispone delle autorizzazioni necessarie, riceverai una serie di errori "Accesso negato" . Per gestire Microsoft 365 a livello globale con PowerShell, è necessario disporre di almeno uno di questi ruoli:
- Amministratore globale, se vuoi controllare praticamente tutto.
- Amministratore di Exchange per la sezione posta e caselle postali.
- Altri ruoli specifici: Amministratore della sicurezza, Amministratore di Teams, ecc.
Exchange Online utilizza il controllo degli accessi basato sui ruoli (RBAC), quindi il tuo account deve appartenere a gruppi come Gestione organizzazione o Gestione destinatari per creare e modificare cassette postali, regole, ecc. Inoltre, se intendi utilizzare Microsoft Graph, dovrai autorizzare gli ambiti appropriati , ad esempio:
- Utente.Leggi.Tutto per enumerare gli utenti e leggere i dati di base.
- Group.ReadWrite.All Gestire gruppi e, tra le altre cose, team.
Tieni inoltre presente che puoi abilitare o disabilitare l'accesso a Exchange Online PowerShell per ciascun utente utilizzando cmdlet come:
Set-User -Identity [email protected] -EXOModuleEnabled $trueSet-User -Identity [email protected] -EXOModuleEnabled $false
Questo è molto utile per rafforzare la superficie di attacco: non tutti hanno bisogno di poter aprire una sessione di Exchange Online PowerShell , anche se dispongono di una casella di posta.
Installazione dei moduli chiave per Office 365/Microsoft 365
Per connettersi a diversi servizi in modo moderno, non sono più necessari i vecchi programmi di installazione MSI per "Accesso ai servizi online di Microsoft", Lync Online, ecc. La maggior parte dei moduli attuali viene installata direttamente dalla PowerShell Gallery , il che semplifica notevolmente la manutenzione e gli aggiornamenti.
Gli elementi costitutivi di base che dovresti aver installato sono:
- GestioneScambioOnline: Modulo EXO V2 per Exchange Online (cmdlet principale:
Connect-ExchangeOnline). - MicrosoftGraph e facoltativamente Microsoft.Graph.Beta- SDK ufficiale di Microsoft Graph per PowerShell.
- Microsoft.Online.SharePoint.PowerShellAmministrazione di SharePoint Online.
- Microsoft TeamsGestione di Microsoft Teams tramite PowerShell.
Installazione tipica (esecuzione di PowerShell come amministratore):
Install-Module -Name ExchangeOnlineManagement -Force -AllowClobber
Install-Module -Name Microsoft.Graph -Scope CurrentUser
Install-Module -Name Microsoft.Online.SharePoint.PowerShell -Force
Install-Module -Name MicrosoftTeams -Force
L' opzione -Force forza l'installazione o l'aggiornamento, mentre -AllowClobber consente di sovrascrivere i cmdlet di altri moduli in caso di conflitto. Dopodiché, è possibile verificare ciascun modulo con:
Get-Module -ListAvailable -Name ExchangeOnlineManagement
Se hai bisogno di compatibilità con script meno recenti, puoi anche mantenere moduli classici come MSOnline o AzureAD , ma Microsoft consiglia di migrare a Microsoft Graph PowerShell , che rappresenta il futuro della gestione delle identità e delle risorse.
Connettiti a più servizi in un'unica sessione PowerShell
Idealmente, dovresti lavorare da un'unica console per evitare di passare da una finestra all'altra. La buona notizia è che oggi è perfettamente possibile, a patto di caricare i moduli appropriati e di comprendere il funzionamento di ciascun cmdlet di connessione.
In linea generale, è possibile seguire questo schema:
- Avvia PowerShell (preferibilmente a 64 bit, con privilegi elevati se intendi modificare ExecutionPolicy).
- Crea un oggetto credenziali, se il modulo lo accetta (
Get-Credential). - Carica i moduli che intendi utilizzare con
Import-Module. - Eseguire i cmdlet di connessione: Exchange, Graph, SharePoint, Teams…
Semplice esempio di accesso interattivo per più servizi:
$credential = Get-Credential
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline -ShowProgress:$true
Import-Module Microsoft.Online.SharePoint.PowerShell -DisableNameChecking
$orgName = "tuempresa" # subdominio de tutenant.onmicrosoft.com
Connect-SPOService -Url https://$orgName-admin.sharepoint.com -Credential $credential
Import-Module MicrosoftTeams
Connect-MicrosoftTeams -Credential $credential
Nel frattempo, Microsoft Graph gestisce l'autenticazione in modo diverso. Non è possibile passare le credenziali direttamente al cmdlet ; al contrario, viene avviato un flusso interattivo basato su OAuth 2.0.
Connect-MgGraph -Scopes "User.Read.All","Group.ReadWrite.All"
Verrà visualizzato un messaggio che ti chiederà di accedere al tuo browser e di concedere le autorizzazioni per questi ambiti. Una volta accettate, la sessione Graph sarà utilizzabile nella stessa finestra di PowerShell già connessa a Exchange, SharePoint e Teams.
Con questo approccio, hai tutto il necessario per gestire account, caselle di posta, siti, team e impostazioni di sicurezza in modo centralizzato in un'unica sessione , senza dover aprire infinite schede.
Utilizzo di Microsoft Graph PowerShell a livello di organizzazione
Microsoft Graph PowerShell è il "nuovo standard" per accedere al livello API di Microsoft 365. Con un singolo SDK, è possibile accedere a utenti, gruppi, team, dispositivi, report e altro ancora. Da PowerShell, l'esperienza è simile a quella di qualsiasi altro modulo, ma con la differenza degli ambiti e del modello delegato rispetto al modello di sola applicazione.
Per lavorare in modo interattivo, la prassi usuale è quella di utilizzare l'accesso delegato : si effettua l'accesso come utente (di solito amministratore) e si dà il consenso per conto di tale utente:
Install-Module Microsoft.Graph -Scope CurrentUser
Import-Module Microsoft.Graph
Connect-MgGraph -Scopes "User.Read.All","Group.ReadWrite.All"
Con questi strumenti è possibile, ad esempio:
- Utenti della lista per individuare l'ID dell'utente connesso.
- Guarda le squadre di cui fa parte (squadre unite).
- Elenco canali di una squadra specifica.
- Manda messaggi a un canale Teams dagli script.
Per gli scenari non presidiati (attività pianificate, pipeline CI/CD, automazioni notturne, ecc.), l'approccio migliore è passare all'autenticazione solo dell'applicazione con una registrazione dell'app in Microsoft Entra ID e un certificato X.509. In questo caso, l'app si autentica con AppId, TenantId e certificato , e non è necessaria l'interazione umana, consentendo di eseguire attività in background in modo controllato.
Connettività moderna a Exchange Online e ad altri ambienti
Per anni mi sono connesso a Exchange Online con New-PSSession e autenticazione di base. Quel percorso è ufficialmente chiuso dall'ottobre 2022.Ora tutto passa attraverso il modulo ExchangeOnlineManagement, che utilizza l'autenticazione moderna (OAuth 2.0) e supporta l'autenticazione a più fattori (MFA), i certificati, le identità gestite, ecc.
Lo schema di base per gli amministratori umani è il seguente:
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline -UserPrincipalName [email protected]
Si apre la finestra di accesso, inserisci la password, risolvi l'autenticazione a più fattori e hai finito. Da lì puoi utilizzare cmdlet come Get-EXOMailbox, Get-EXOMailboxStatistics, New-Mailbox, Set-Mailbox o Remove-Mailbox non più.
Per automatizzare senza utilizzare un browser, in Azure sono disponibili diverse opzioni di autenticazione basate su certificati o identità gestite :
Connect-ExchangeOnline -ManagedIdentity -Organization tudominio.onmicrosoft.com
In alternativa, è possibile utilizzare un'app registrata e un certificato:
Connect-ExchangeOnline -AppId "APP-ID" -Organization "tudominio.onmicrosoft.com" -CertificateThumbprint "THUMBPRINT"
Questo tipo di connessione è ideale quando si desidera eseguire script ricorrenti da Azure Automation, Azure Functions o una macchina virtuale con identità gestita: non ci sono password in chiaro e il ciclo di vita del certificato è ben controllato.
Connettiti a SharePoint Online e Teams da PowerShell
Una volta configurati email e identità, probabilmente vorrete gestire siti SharePoint e team di Teams tramite script. Il processo è molto simile a quello già visto con Exchange; l'unica differenza risiede nei moduli e nei cmdlet utilizzati.
a SharePoint Online È necessario conoscere l'URL di amministrazione del proprio tenant, qualcosa di simile a questo: https://tuempresa-admin.sharepoint.comIl collegamento fondamentale è:
Import-Module Microsoft.Online.SharePoint.PowerShell -DisableNameChecking
$cred = Get-Credential
Connect-SPOService -Url "https://tuempresa-admin.sharepoint.com" -Credential $cred
Da lì hai a disposizione cmdlet come Get-SPOSite per elencare le raccolte siti, i comandi per applicare i criteri, gestire l'archiviazione, ecc. È possibile riutilizzare lo stesso oggetto credenziali per altri servizi.semplificando la sceneggiatura.
Nel caso di Microsoft Teams , il modulo supporta anche l'autenticazione moderna e l'autenticazione a più fattori (MFA). Un flusso di lavoro tipico sarebbe il seguente:
Import-Module MicrosoftTeams
Connect-MicrosoftTeams -Credential $cred
In alternativa, è possibile lasciare che si apra la finestra di dialogo di accesso senza passare credenziali esplicite. Una volta effettuato l'accesso, i cmdlet principali come Get-Team, New-Team o Get-TeamUser Consentono di automatizzare la creazione di team, la gestione dei membri, la configurazione dei canali e altro ancora, spesso in combinazione con Microsoft Graph per scenari più avanzati.
Gestione e disconnessione sicure della sessione
PowerShell non si limita alla semplice connessione: è fondamentale anche gestire correttamente le sessioni aperte . Exchange Online, ad esempio, impone un limite di circa 3 sessioni simultanee per utente e, se le si lasciano aperte, si rischia di incorrere nel famigerato errore "numero massimo di sessioni superato".
Si consiglia di chiudere esplicitamente le sessioni al termine delle attività, anziché limitarsi a chiudere la finestra. Per Exchange Online con EXO V2:
Disconnect-ExchangeOnline -Confirm:$false
Se hai generato anche sessioni remote con New-PSSession Per altri servizi (o per la compatibilità con script più vecchi), è consigliabile anche ripulirli:
Get-PSSession | Remove-PSSession
SharePoint e Teams hanno i propri cmdlet di disconnessione:
Disconnect-SPOService
Disconnect-MicrosoftTeams
Lavorare in questo modo evita sessioni orfane sui server, libera risorse e riduce i rischi per la sicurezza. Inoltre, se si dispone di script lunghi, è consigliabile eseguirli in un'unica sessione e controllare i timeout anziché creare inutili cicli di connessione e disconnessione.
Risoluzione dei problemi di connessione più comuni
Per quanto meticolosamente tu l'abbia configurato, è quasi certo che prima o poi ti imbatterai in alcuni messaggi strani. La maggior parte degli errori di connessione ai servizi di Office 365 tramite PowerShell rientrano in alcune categorie tipiche :
Quando visualizzi messaggi come "Il termine 'Connect-ExchangeOnline' non è riconosciuto", di solito significa che il modulo non è installato o non è stato importato correttamente . Puoi verificarlo con:
Get-Module -ListAvailable -Name ExchangeOnlineManagement
Se non compare, reinstallalo dalla PowerShell Gallery. Se compare ma non si carica, assicurati di non utilizzare una versione di PowerShell precedente o a 32 bit che non supporti quel modulo.
Gli errori di autenticazione ("Accesso negato", "non si dispone di autorizzazioni sufficienti") sono generalmente dovuti a:
- Ruoli insufficienti in Microsoft 365 (mancanza di amministratore di Exchange, amministratore globale, ecc.).
- Requisiti MFA non soddisfatti, password dell'app disabilitata o criteri di accesso condizionale.
- Credenziali di ricerca corrotte nel gestore delle credenziali di Windows.
La soluzione consiste nel rivedere i ruoli nel portale di amministrazione, verificare se l'organizzazione ha regole di accesso condizionale che bloccano PowerShell e, se necessario, eliminare le credenziali salvate e testare nuovamente il flusso di accesso.
Anche i problemi con TLS o i proxy sono frequenti: messaggi come "La connessione sottostante è stata chiusa" o "Impossibile connettersi al server remoto" indicano che TLS 1.2 non è in uso o che il firewall sta bloccando il traffico. Assicurati di:
- Assicurati che .NET sia aggiornato (versione 4.6.2 o superiore).
- Forza l'utilizzo di TLS 1.2 se necessario tramite PowerShell.
- Verifica che il proxy consenta il traffico verso gli endpoint Microsoft.
Infine, quando sono installati diversi moduli (MSOnline, AzureAD, ExchangeOnlineManagement, versioni precedenti di EXO, ecc.), potrebbero verificarsi conflitti di cmdlet o di versione. In tal caso:
- Elenco dei moduli con
Get-Module -ListAvailable. - Scopri a quale modulo appartiene un cmdlet con
Get-Command NombreCmdlet. - Importa esplicitamente la versione corretta con
Import-Module -RequiredVersion. - Disinstalla i vecchi moduli che non ti servono più con
Uninstall-Module.
Grazie a queste linee guida, la maggior parte dei problemi si risolve senza dover impazzire leggendo infiniti registri.
Padroneggiare la connessione a più servizi di Office 365 tramite PowerShell consente di passare dalla modifica manuale nel portale all'automazione di attività di massa, applicando configurazioni avanzate non disponibili nemmeno nell'interfaccia grafica e mantenendo un controllo molto più preciso su sicurezza e accesso . Preparare correttamente l'ambiente (versioni, moduli, autorizzazioni e criteri di esecuzione), utilizzare un'autenticazione moderna con MFA e certificati, centralizzare le connessioni in una o poche sessioni e gestire il ciclo di vita delle sessioni renderà il lavoro quotidiano di un amministratore di Microsoft 365 molto più agevole e, soprattutto, scalabile.
Scrittore appassionato del mondo dei byte e della tecnologia in generale. Adoro condividere le mie conoscenze attraverso la scrittura, ed è quello che farò in questo blog, mostrarti tutte le cose più interessanti su gadget, software, hardware, tendenze tecnologiche e altro ancora. Il mio obiettivo è aiutarti a navigare nel mondo digitale in modo semplice e divertente.
