Nel corso di questi anni abbiamo scoperto Powershell come un grandissimo alleato per tutte quelle operazioni di gestione delle nostre farm SharePoint.
Sono certo che siate d’accordo con me nel dire che questo tool è risultato davvero molto utile per noi "SharePointiani", che abbiamo spesso a che fare con configurazioni da replicare, contenuti da gestire, ecc..
Passando a lavorare sul cloud però, praticamente quasi tutti i commandlet che siamo abituati ad utilizzare su Powershell per interagire con la nostra farm SharePoint (on prem) non sono più disponibili per la versione del prodotto di collaborazione Microsoft integrato nell'offerta di Office 365 e in più abbiamo una lista di nuovi comandi da imparare per la gestione del proprio tenant.
Con questo post vorrei fare un po' di ordine e darvi i riferimenti precisi per ognuna delle possibilità di scripting che avete per interagire con Office 365.

Gestione del tenant Office 365, Exchange Online ed Azure AD
Office 365 è una piattaforma cloud che permette di fare gran parte delle configurazioni via browser, ma che mette comunque a disposizione un set di comandi Powershell per automatizzare le attività che abbiamo la necessità di fare sul nostro tenant. Per intenderci, abbiamo la possibilità di automatizzare l'importazione degli utenti, la creazione di gruppi, la gestione delle mailbox, la creazione di mailbox condivise, gestire le licenze assegnate e tanto altro ancora.
Potete trovare la lista dei comandi attualmente disponibili a questo indirizzo
Per avere la possibilità di utilizzare questi comandi, dovete prima installare i seguenti tool:
- Microsoft Online Services Sign-In Assistant for IT Professionals
- Azure Active Directory Module per Windows PowerShell (32 bit o 64 bit)

Primo passo per poter utilizzare qualsiasi dei comandi è quello di autenticarsi al proprio tenant.
L'autenticazione è possibile richiamando il comando Connect-MsolService (dove Msol sta per Microsoft Online Service). Questo comando necessita come parametro le credenziali dell'utente che si accinge a collegarsi ad Office 365. Per chiedere all'utente tali credenziali possiamo sfruttare il comando Get-Credential, che aprirà la classica finestra di Windows per l'inserimento di credenziali di dominio.

$cred = Get-Credential
Connect-MsolService -Credential $cred

Una volta connessi al tenant, avete la possibilità di lanciare qualsiasi dei comandi di cui vi ho lasciato l'elenco sopra. Ovviamente è necessario inserire le credenziali di un amministratore del tenant.


Questi comandi vengono aggiornati con cadenza mensile, seguendo i cicli di aggiornamento di Office 365, quindi è necessario ricordarsi di riscaricare l'installer.

Gestione di SharePoint Online e One Drive for Business
Microsoft ha deciso di rilasciare un set di comandi a parte solo per la gestione di SharePoint Online. Tramite questi comandi è possibile gestire nello specifico le funzionalità e i contenuti di SharePoint Online e One Drive for Business. Per utilizzare questi comandi è necessario installare la SharePoint Online Management Shell a questo indirizzo.
Questo tool è un modulo Powershell che consente agli amministratori del tenant di gestione gli utenti SharePoint Online, i siti, le site collection, i gruppi e altro ancora, da riga di comando.
Per visualizzare l'elenco dei comandi disponibili potete far riferimento a questo indirizzo.
Per autenticarsi è necessario utilizzare il comando Connect-SPOService in questo modo:

Connect-SPOService -Url https://dev4side-admin.sharepoint.com -credential youradmin@yourdomain.onmicrosoft.com

Al comando Connect-SPOService è necessario passare l'indirizzo di amministrazione del vostro SharePoint Online (che rispetta sempre il pattern: vostrodominio-admin.sharepoint.com), assieme alla mail dell'utente amministratore del tenant. Subito dopo vi verrà richiesta la password di accesso.


Qual è la differenza con il modulo di cui abbiamo parlato prima? 
Semplicemente che questo è relativo SOLO alla gestione di SharePoint Online, mentre l'Azure AD Module permette di gestire tutto il tenant Office 365, Azure AD ed Exchange Online.

Interazione con SharePoint Online
L'elenco dei comandi per gestire il proprio tenant Office 365, come avrete capito, non comprende niente relativamente alla gestione dei contenuti dei vostri siti SharePoint Online. Per questo abbiamo la possibilità di sfruttare una delle API del prodotto che, se lavorate con SharePoint, conoscerete sicuramente: il Client Object Model (CSOM). Per chi di voi non sa cos’è CSOM, non si tratta nient'altro che di librerie che permettono di interagire con i servizi e i contenuti di SharePoint da remoto, quindi senza che il vostro script debba essere eseguito all’interno del server SharePoint (cosa che su SharePoint Online è ovviamente impossibile).
CSOM copre un set di funzionalità limitato rispetto al Server Object Model di SharePoint on premise, ma ci offre comunque la possibilità di effettuare tantissime operazioni che da interfaccia non sono disponibili. Giusto per farvi degli esempi, abbiamo la possibilità di recuperare gli errori di sistema, settare proprietà nascoste di liste, file ed elementi, automatizzare la creazione di contenuto (provisioning) e tanto altro ancora.
Per poter sfruttare queste librerie all’interno di Powershell è necessario scaricarle a questo indirizzo.

Nota: le librerie verranno installate di default al seguente percorso: C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI

Per consultare la documentazione di tutte queste API potete andare a questo indirizzo.
Una volta scaricare le librerie, prima di poterne utilizzare le classi al loro interno, è necessario caricarle nel contesto corrente di Powershell e poi connettersi a SharePoint Online.
Per connettersi ci basta creare una nuova istanza della classe ClientContext, passando username e password.

$username = "yourusername@yourdomain.onmicrosoft.com" 
$password = "yourpassword" 
$url = "https://dev4side.sharepoint.com"
$securePassword = ConvertTo-SecureString $Password -AsPlainText -Force 
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" 
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll" 
$context = New-Object Microsoft.SharePoint.Client.ClientContext($url) 
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePassword) 
$context.Credentials = $credentials
$context.Load($context.Web.Title)
$context.ExecuteQuery()
$context.Web.Title

Rispetto a prima, basta che l'utente specificato abbia i permessi su SharePoint Online per eseguire l'azione scelta (nel nostro caso la lettura del titolo del sito SharePoint Online richiesto).



Conclusioni

Come avete visto, per poter gestire Office 365 tramite script è necessario avvalersi di diversi tool e librerie. Vi accorgerete sicuramente che spesso serve utilizzare queste librerie assieme fra loro per raggiungere i nostri obiettivi.
La cosa molto importante, onde evitare di perdersi le nuove funzionalità della piattaforma, è quella di ricordarsi di aggiornare le librerie con cadenza mensile. Questa è la cadenza con cui Microsoft stessa aggiorna Office 365 e in questo modo siete sicuri di essere sempre aggiornati.
Se avete bisogno di esempi d’uso, potete far riferimento a questo indirizzo: https://support.office.com