Connessione Office 365 da PowerShell
Tratto da http://blogs.pulsarit.net/2015/06/connessione-office-365-da-powershell/ un grazie ad Andrea!
******************************************************************************
Chi come me amministra o gestisce un tenant Office365 con PowerShell apprezzerà particolarmente questo post 

Una delle parti più “noiose” è la connessione ai vari servizi del tenant, io ho risolto in questo modo.
In sostanza si tratta di aggiungere due funzioni al profile PowerShell.
Il principale requisito è PowerShell 3.0 o superiore, già presente sui seguenti sistemi operativi: Windows Server 2012/2012 R2, Windows 8/8.1, e Windows 10 ovviamente 
Se si utilizza Windows 7 o Windows Server 2008 R2, bisogna installare il Windows Management Framework 3.0, che include la PowerShell 3.0, disponibile qui.

Se si utilizza Windows 7 o Windows Server 2008 R2, bisogna installare il Windows Management Framework 3.0, che include la PowerShell 3.0, disponibile qui.
Innanzitutto installiamo i requisiti:
Microsoft Online Services Sign-In Assistant for IT Professionals RTW (installare la stessa architettura del sistema operativo)
Azure Active Directory Module for Windows PowerShell (32-bit version)
o
Azure Active Directory Module for Windows PowerShell (64-bit version)
Windows PowerShell Module for Lync Online
SharePoint Online Management Shell
Azure Active Directory Module for Windows PowerShell (32-bit version)
o
Azure Active Directory Module for Windows PowerShell (64-bit version)
Windows PowerShell Module for Lync Online
SharePoint Online Management Shell
Per verificare se ci sono aggiornamenti, la lista ufficiale dei primi due è disponibile qui.
Avviamo una PowerShell amministrativa e, per prima cosa, verifichiamo che esista il “profile” con questo comando:
1 
 | Test-Path $Profile | 
Se l’output è “False” non esiste, per cui lo creiamo con il comando:
1 
 | New-Item -Path $Profile -Type File -Force | 
Modifichiamo l’Execution policy per richiedere la firma solo per l’esecuzione di script remoti:
1 
 | if ((Get-ExecutionPolicy) -eq "AllSigned") {Set-ExecutionPolicy -ExecutionPolicy RemoteSigned} | 
Ora possiamo aggiungere la funzione al profile.
Si può usare qualunque editor di testo, ma io consiglio di usare l’ISE di PowerShell.
Sempre dalla PowerShell amministrativa eseguire
Si può usare qualunque editor di testo, ma io consiglio di usare l’ISE di PowerShell.
Sempre dalla PowerShell amministrativa eseguire
1 
 | ise $Profile | 
Aggiungere queste due funzioni:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 
83 
84 
85 
86 
87 
88 
89 
90 
91 
92 
93 
94 
95 
96 
97 
98 
99 
100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
111 
112 
113 
114 
115 
116 
117 
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
128 
129 
130 
131 
132 
133 
134 
135 
136 
137 
138 
139 
140 
141 
142 
143 
144 
145 
146 
147 
148 
149 
150 
151 
152 
153 
154 
155 
156 
157 
158 
159 
160 
 | function Connect-O365 {  param(  [switch]$Office365,  [switch]$Exchange,  [switch]$Lync,  [switch]$SharePoint  )  if (!($AzureAD -or $Exchange -or $Lync -or $SharePoint)) {    $all = $true  }  # Impostazione variabili  # URL di accesso Exchange Online  # FQDN accesso Skype for Business Online  $LyncOnline = "webdir.online.lync.com"  # Credenziali Tenant admin  $O365Cred = Get-Credential -Message "Inserire le credenziali di un admin del tenant Office 365"  # Verifica del formato utente  if ($O365Cred.UserName -notmatch '.*\@.*') {    Write-Warning "L'utente deve essere in formato UserPrincipalName (admin@tenant.onmicrosoft.com o admin@dominio_federato)"    return  }  # Recupero dominio dal Tenant Admin  $AdminDomain = ($O365Cred.UserName -split '@')[1]  # Composizione FQDN Lyncdiscover  $lyncdiscover = "lyncdiscover." + $AdminDomain  # Lista tutti i moduli  $Modules = Get-Module -ListAvailable -Refresh  $Error.Clear()  # Connessione Azure AD  if ($Office365 -or $all) {    if ($Modules | Where-Object {$_.Name -eq "MSOnline"}) {      Import-Module MSOnline -ErrorAction Stop      try {        $Error.Clear()        Write-Host "Connessione in corso al tenant Office 365"        $MSOLService = Connect-MsolService -Credential $O365Cred -ErrorAction SilentlyContinue        if ($Error.Count -eq 0) {          $tenantDNS = (Get-MsolDomain | where IsDefault -eq "True").Name          Write-Host -ForegroundColor Green "Connesso al tenant Office 365 $tenantDNS"                   ##          $hostUIO365 = (Get-MsolDomain -Authentication Federated).name          $tenant = (Get-MsolAccountSku)[0].AccountName          # Composizione URL di gestione SharePoint Online        }      }      catch {        Write-Host -ForegroundColor Red "Impossibile connettersi al tenant Office 365`n Error:" $Error        Return      }    }    else {      Write-Host -ForegroundColor Red "Forse il modulo Azure Active Directory Module for Windows PowerShell non è installato`n Error:" $_      # Return    }  }  $Error.Clear()  # Connessione Exchange Online  if ($Exchange -or $all) {    try {      $Global:EOLSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $URI -Credential $O365Cred -Authentication Basic -AllowRedirection -ErrorAction SilentlyContinue         if ($Error.Count -eq 0) {        Write-Host "Importazione sessione Exchange"        $ImportResults = Import-PSSession -Session $EOLSession        Write-Host -ForegroundColor Green "Connesso alla sessione amministrativa Exchange`nImported" $ImportResults.ExportedFunctions.count "Functions"        # $host.UI.RawUI.WindowTitle = "Tenant: " + $(Get-FederatedOrganizationIdentifier).AccountNamespace        $hostUIEOP = (Get-FederatedOrganizationIdentifier).AccountNamespace        $host.UI.RawUI.WindowTitle = "Tenant: " + $hostUIEOP + " - Domini federati: " + $hostUIO365      }    }    catch {      Write-Host -ForegroundColor Red "Impossibile connettersi alla sessione Exchange Online`n Error:" $Error    }  }     # Connessione Skype for Business Online  if ($Lync -or $all) {    if ($(Resolve-DnsName -type CNAME $lyncdiscover -ErrorAction SilentlyContinue).NameHost -eq $LyncOnline) {      if ($Modules | Where-Object {$_.Name -eq "LyncOnlineConnector"}) {        Import-Module LyncOnlineConnector        try {          $Error.Clear()          $Global:LyncSession = New-CsOnlineSession -Credential $O365Cred -ErrorAction SilentlyContinue          if ($Error.Count -eq 0) {            Write-Host "Importazione sessione Lync"            $ImportResults = Import-PSSession -Session $LyncSession            Write-Host -ForegroundColor Green "Connesso alla sessione amministrativa Lync`nImported" $ImportResults.ExportedFunctions.count "Functions"          }        }        catch {          Write-Host -ForegroundColor Red "Impossibile connettersi alla sessione Lync Online`n Error:" $Error        }      }      else {        Write-Host -ForegroundColor Red "Forse il modulo Lync Online non è installato`n Error:" $_      }    }    else {      Write-Host -ForegroundColor Red "Il record DNS Lyncdiscover non esiste o non corrisponde al tenant Office 365"    }  }  # Connessione SharePoint Online  if ($SharePoint -or $all) {    if ($(Resolve-DnsName -type CNAME $lyncdiscover -ErrorAction SilentlyContinue).NameHost -eq $LyncOnline) {      if ($Modules | Where-Object {$_.Name -eq "Microsoft.Online.SharePoint.PowerShell"}) {        Import-Module Microsoft.Online.SharePoint.PowerShell        try {          $Error.Clear()          Write-Host "Connessione in corso a SharePoint Online"          Connect-SPOService -Url $SPURL -credential $O365Cred          if ($Error.Count -eq 0) {            Write-Host -ForegroundColor Green "Connesso alla sessione amministrativa di SharePoint Online"          }        }        catch {          Write-Host -ForegroundColor Red "Impossibile connettersi al SharePoint Online`n Error:" $Error        }      }      else {        Write-Host -ForegroundColor Red "Forse il modulo SharePoint Online non è installato`n Error:" $_        # Return      }    }    else {      Write-Host -ForegroundColor Red "Il record DNS SharePoint non esiste o non corrisponde al tenant Office 365"    }  }}function Disconnect-O365 {  if ($Global:EOLSession) {    Write-Host "Rimozione sessione amministrativa Exchange Online"    Remove-PSSession $EOLSession  }  if ($Global:LyncSession) {    Write-Host "Rimozione sessione amministrativa Skype for Business Online"    Remove-PSSession $LyncSession  }  if ($(Get-Module Microsoft.Online.SharePoint.PowerShell)) {    Write-Host "Rimozione sessione amministrativa SharePoint Online"    Disconnect-SPOService  }} | 
Adesso, ogni volta che si apre una PowerShell, è sufficiente richiamare la funzione con il comando
1 
 | Connect-O365 | 
e nel popup di richiesta credenziali inserire un amministratore del tenant.
Se appare una richiesta di avviare il servizio WinRM, rispondere Yes.
E’ dovuto al caricamento del modulo LyncOnline nella sessione PowerShell amministrativa.
Se appare una richiesta di avviare il servizio WinRM, rispondere Yes.
E’ dovuto al caricamento del modulo LyncOnline nella sessione PowerShell amministrativa.
Volendo è possibile connettersi solo ad alcuni servizi, ad esempio per Exchange Online e Lync Online
1 
 | Connect-O365 -Exchange -Lync | 
Le opzioni disponibili sono:
1 
2 
3 
4 
 | -Office365-Exchange-Lync-SharePoint | 
Per disconnettere le sessioni, eseguire
1 
 | Disconnect-O365 | 
Commenti
Posta un commento