Microsoft 365 DSC
Hi folks,
DSC vous allez me dire… oui … et donc ?
Première chose, DSC stands for : Desired State Configuration.
C’est du SaaS Management Platform, Comment savoir que votre tenant Microsoft est configuré comme vous souhaitez ? Le comparer, faire des remontés de configurations automatiques, et pourquoi pas forcer les configurations sur la base d’un blueprint, etc. …
Cet outil communautaire va vous permettre d’exporter la configuration d’un ensemble de brique M365 comme Exchane, Teams, SharePoint, OneDrive, la sécurité, la conformité, la power plateforme, planner, et même Intune !
Le principe est de pouvoir définir comment votre tenant doit être configuré, et déployer ces configurations. Vous aurez la possibilité également d’exporter les données, et analyser les écarts de configuration vis-à-vis de votre gouvernance.
Je ne vais pas entrer dans tous les détails car tout est super bien expliqué par ici : What is Microsoft365DSC? – Microsoft365DSC – Your Cloud Configuration

Donc plutôt qu’un long billet, je vous propose de le tester
Step 1 : Télécharger le module par ici : PowerShell Gallery | Microsoft365DSC 1.21.1124.2 et installer le module
Install-Module Microsoft365DSC
Step 2 : Enregistrer une Application dans Azure AD, au niveau des permissions du module, vous pouvez regarder ce qui est nécessaire avec la cmdlet :
Get-M365DSCCompiledPermissionList
Vous avez la possibilité également de filtrer les permissions par module par exemple :
Get-M365DSCCompiledPermissionList -RessourceNameList @(‘<ressourcename>’)
La liste des ressources est ici : Resources List · microsoft/Microsoft365DSC Wiki · GitHub
Vous allez me dire, oulala la liste est super longue, … well un GUI existe pour sélectionner et générer la commande à exécuter par ici : Microsoft365DSC – Configuration-as-Code for the Cloud ou bien avec le cmdlet
Export-M365DSCConfiguration -LaunchWebUI
Vous sélectionner ce que vous souhaitez, puis cliquer sur générer en haut ![]()

Ensuite un petit copier / coller dans une invite PShell et GO
Ce n’est pas nécessairement une bonne idée de prendre tous les modules opur faire un rapport énorme… pensez que lors de vos configurations, c’est principalement module par module, donc « piochez » dans la liste avec parcimonie ![]()

Une fois la commande terminée, vous obtenez un fichier de configuration au format PS1.
A noté qu’il est possible que la connexion au graph ne fonctionne pas comme attendu, c’est alors une question de permissions. Cela se résous avec
connect-mggraph -scopes "Application.Read.All","Application.ReadWrite.All","Directory.AccessAsUser.All","Directory.Read.All","DeviceManagementApps.Read.All","DeviceManagementApps.ReadWrite.All","DeviceManagementManagedDevices.Read.All","DeviceManagementManagedDevices.ReadWrite.All","DeviceManagementServiceConfig.Read.All","DeviceManagementServiceConfig.ReadWrite.All","Directory.ReadWrite.All","Group.Read.All","Group.ReadWrite.All","GroupMember.Read.All","Policy.Read.All","RoleManagement.Read.Directory","RoleManagement.ReadWrite.Directory","User.Read.All","User.ReadBasic.All","User.ReadWrite.All","Organization.Read.All","Organization.ReadWrite.All","User.Read","Policy.ReadWrite.ApplicationConfiguration","DeviceManagementConfiguration.Read.All","Application.Read.All","Application.ReadWrite.All","Directory.AccessAsUser.All","Directory.Read.All","Directory.ReadWrite.All","DeviceManagementApps.Read.All","DeviceManagementApps.ReadWrite.All","DeviceManagementManagedDevices.Read.All","DeviceManagementManagedDevices.ReadWrite.All","DeviceManagementServiceConfig.Read.All","DeviceManagementServiceConfig.ReadWrite.All","Group.Read.All","Group.ReadWrite.All","GroupMember.Read.All","Policy.Read.All","Policy.ReadWrite.ConditionalAccess","RoleManagement.Read.Directory","RoleManagement.ReadWrite.Directory","User.Read.All","User.ReadBasic.All","User.ReadWrite.All","Organization.Read.All","Organization.ReadWrite.All","User.Read","Policy.ReadWrite.ApplicationConfiguration","DeviceManagementConfiguration.ReadWrite.All"
Step 3 : Exporter la configuration du fichier PS1, en quelque chose de plus humain avec la commande suivante :
New-M365DSCReportFromConfiguration
D’ici vous faites le choix d’exporter votre fichier ps1 soit en html soit en excel avec la commande suivante
New-M365DSCReportFromConfiguration -type Excel/HTML -ConfigurationPath c:/DSC/InitialConfig.ps1 -outputpath c:/dsc/report.html (ou report.xlsx)
ATTENTION Update Fev2022 :
Si la commande précédente ne vous permet pas de générer le rapport et que ce dernier est vide :
- Mettez à jour les commandes DSC avec :
Update-Module M365DSCDependenciesUpdate-M365DSCDependencies -Force
ou bien réinstaller le module- Utiliser la commande suivante pour Excel :
New-M365DSCConfigrationToExcel -ConfigurationPath .\M365tenantconfig.ps1 -OutputPath .\report -verbose
3. Utiliser la commande suivante pour le HTML:
New-M365DSCConfigrationToHTML -ConfigurationPath .\M365tenantconfig.ps1 -OutputPath .\report -verbose

Et voici le report :
Vous pouvez également comparez des configurations avec :
New-M365DSCDeltaReport -Source 'C:\DSC\UpdatedConfig.ps1' -Destination 'C:\DSC\InitialConfig.ps1' -OutputPath 'C:\dsc\Delta.html'


Pour aller plus loin, je vous invite à consulter le lien suivant : How to install – Microsoft365DSC – Your Cloud Configuration
Dans des uses cases plus avancés, il est possible de monitorer votre tenant en faisant remonter différentes informations à travers un portail de compliance par exemple.
Un exemple d’implémentation par ici : Monitor the Compliance of your Office 365 Configuration with Azure DevOPS and DSC – Crawl, Walk, Run, Automate (nikcharlebois.com)
Si vous faites le choix d’y dédier un agent avec une VM Azure par exemple, vous pouvez faire remonter la ou les configurations toutes les 20mn etc. … et obtenir ce type de rapport (ici pour de la compliance dans Teams)

mickey75019
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()