Comment s’authentifier en PowerShell sur Office 365 ?
Sommaire
I. Présentation
Office 365 dispose d'une console d'administration en ligne, accessible aux administrateurs du compte de l'entreprise, cependant pour automatiser certaines tâches, un script PowerShell sera apprécié.
La première étape d'un script PowerShell qui touche à Office 365 c'est de s'authentifier auprès des services Microsoft Online, c'est donc ce que nous allons voir dans ce tutoriel. Une fois cette étape réalisée vous pourrez effectuer ce que vous souhaitez : créer, supprimer ou ajouter des utilisateurs, modifier la politique des mots de passe, attribuer des licences à vos utilisateurs, voir quels sont les utilisateurs dont la licence Office 365 va expirer, etc... etc...
Article actualisé le 03 août 2018.
II. Le code PowerShell
A. Le module MSOnline
Nous allons devoir utiliser les commandlets du module MSOnline, qui n'est pas natif à Windows. Pour l'installer, vous devez installer dans un premier temps :
Auparavant, il fallait installer "Le pack d'administration pour Microsoft Online Services" mais celui-ci n'existe plus.
A l'aide d'une console PowerShell sur votre serveur, installez ces deux modules afin d'avoir un accès complet à l'environnement Azure AD et Office 365 depuis PowerShell :
Install-Module -Name AzureAD Install-Module MSOnline
Dès que ces éléments sont installés, vous pouvez importer le module dans votre script :
Import-Module MSOnline
B. S'authentifier sur les services Microsoft Online
Désormais, il va falloir faire la connexion auprès des serveurs Microsoft pour pouvoir ensuite réaliser différentes actions. Pour cela, nous allons définir différentes variables :
- $UserAdmin : Utilisateur admin pour se connecter aux services Microsoft (UserPrincipalName de l'utilisateur, normalement une adresse e-mail) - A compléter dans le code
- $Credentials : Stocker les identifiants de connexion dans une variable, notamment le mot de passe pour l'utilisateur $UserAdmin qui sera demandé
- Connect-MsolService : Permet d'établir une connexion avec les services en ligne à partir des credentials ($Credentials) fournit
- $MsoExchangeURL : URL vers les services Outlook d'Office 365 - Elle pourra évoluer dans le temps
- $Session : Créer une nouvelle session PowerShell qui s'appuie sur les paramètres définit précédemment
- Import-PSSession : Importer les paramètres de la session Office 365 que nous avons créé
Voici le bout de code à ajouter :
## Authentification Office 365 $UserAdmin = "[email protected]" $Credentials = Get-Credential -Credential $UserAdmin Connect-MsolService -Credential $Credentials $MsoExchangeURL = "https://ps.outlook.com/PowerShell-LiveID?PSVersion=5.0.10586.122" $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $MsoExchangeURL -Credential $Credentials -Authentication Basic -AllowRedirection ## Importer les paramètres de la session Office 365 Microsoft Online Import-PSSession $Session
Lorsque vous exécuterez ce bout de code, vous devrez saisir le mot de passe de l'utilisateur $UserAdmin :
On peut améliorer le script en stockant les credentials dans un fichier chiffré (il y a différentes manières pour cela) afin de pouvoir ouvrir une connexion sans devoir saisir le mot de passe soi-même.
C. Le module temporaire
Quand l'authentification sera réalisée et la session chargée, vous aurez une ligne de ce type :
ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Script 1.0 tmp_s2btpvwg.540 {Add-AvailabilityAddressSpace, Add-DistributionGroupMember, Add-Mailb...
Un module temporaire nommé "tmp_s2btpvwg.540" est chargé sur votre machine, il contient énormément de commandes, vous pouvez les lister comme ceci :
PS C:\WINDOWS\system32> Get-Command -Module tmp_s2btpvwg.540 CommandType Name Version Source ----------- ---- ------- ------ Function Add-AvailabilityAddressSpace 1.0 tmp_s2btpvwg.540 Function Add-DistributionGroupMember 1.0 tmp_s2btpvwg.540 Function Add-MailboxFolderPermission 1.0 tmp_s2btpvwg.540 Function Add-MailboxPermission 1.0 tmp_s2btpvwg.540 Function Add-ManagementRoleEntry 1.0 tmp_s2btpvwg.540 Function Add-PublicFolderClientPermission 1.0 tmp_s2btpvwg.540 Function Add-RecipientPermission 1.0 tmp_s2btpvwg.540 Function Add-RoleGroupMember 1.0 tmp_s2btpvwg.540 Function Add-UnifiedGroupLinks 1.0 tmp_s2btpvwg.540 Function Clear-ActiveSyncDevice 1.0 tmp_s2btpvwg.540 Function Clear-MobileDevice 1.0 tmp_s2btpvwg.540 Function Clear-TextMessagingAccount 1.0 tmp_s2btpvwg.540 Function Compare-TextMessagingVerificationCode 1.0 tmp_s2btpvwg.540 Function Complete-MigrationBatch 1.0 tmp_s2btpvwg.540 Function Disable-App 1.0 tmp_s2btpvwg.540 etc....
Le nom du module temporaire ne sera probablement pas le même sur votre machine. Désormais, vous êtes en mesure de vous authentifier sur les services Microsoft Online, notamment pour gérer Office 365, par l'intermédiaire du bout de code fourni ci-dessus dans le tutoriel.
Merci Florian pour ce tuto très intéressant !
Question bonus : est-il possible d’utiliser ce script/cmdlets comme base à l’activation des logiciels Office 365 pour les utilisateurs finaux ?
L’idée étant de bypasser/automatiser l’enregistrement au 1er lancement du produit.
Bonjour Yann,
Je ne suis pas sûr que ce soit possible, car je pense que la session ouverte ne sort pas du scope du script en lui-même, ce qui ne permettrait pas à l’assistant de premier démarrage d’en profiter.
Florian
Hello, voici ce que j’utilise de mon coté 😉 :
Si ça peut servir :
Set-ExecutionPolicy RemoteSigned -force -confirm:$false
##########################################Connexion Office365
$User = “[email protected]”
$Pass = ConvertTo-SecureString « le mot de passe » -AsPlainText -Force
$Credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ($User,$Pass)
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $Credentials -Authentication Basic -AllowRedirection
Import-PSSession $Session
Connect-MsolService -Credential $Credentials
Import-Module MSOnline
Hello Bad-Hell,
Merci d’avoir proposé une alternative 😉
Florian
Pour info le lien vers le pack d’admin est mort : https://docs.microsoft.com/en-us/collaborate/connect-redirect 🙁