Rawpixel.com - stock.adobe.com

Microsoft 365 : ajoutez des utilisateurs avec PowerShell

Cet article explique comment simplifier le provisionnement des utilisateurs sur la plateforme de collaboration en cloud, en donnant des exemples de scripts qui fonctionnent avec Microsoft Graph.

L’onboarding de Microsoft 365 est une tâche courante pour de nombreux administrateurs. Une façon de la rendre moins pénible est d’automatiser ses étapes avec PowerShell.

Lorsqu’un nouvel employé commence à travailler, c’est à l’administrateur de configurer un nouveau compte utilisateur avec toutes les autorisations et les ressources dont il a besoin. Selon l’entreprise, le processus d’intégration d’un utilisateur dans Microsoft 365 peut être compliqué. La plupart des étapes impliquent le provisionnement du compte, l’attribution des licences et la configuration des autorisations pour les rôles, les applications ou les services.

Il est impératif, en particulier dans les grandes entreprises, d’adopter une approche plus rationnelle de l’intégration des comptes utilisateurs dans Microsoft 365. La meilleure façon d’y parvenir est d’apprendre à utiliser PowerShell et Microsoft Graph pour créer des scripts qui prennent en charge la majeure partie du travail.

Quels modules PowerShell utiliser ?

Microsoft 365 fournit des modules PowerShell standard pour la gestion des utilisateurs. Historiquement, vous avez utilisé soit le module Microsoft Online PowerShell (MSOnline), soit le module Azure AD PowerShell. Microsoft a supprimé ces deux modules PowerShell en mars 2024 et ne fournira une assistance que pour résoudre les problèmes de sécurité critiques. Cela signifie que les modules fonctionneront encore au moins jusqu’au 30 mars 2025.

Microsoft préfère que les administrateurs utilisent des outils plus récents, en particulier le module Microsoft Graph PowerShell. Microsoft a investi beaucoup d’efforts dans Microsoft Graph afin d’offrir une approche de gestion unifiée qui simplifie le travail des administrateurs dans Microsoft 365, tout en offrant de meilleures performances et une meilleure évolutivité.

Microsoft recommande aux informaticiens de migrer les scripts existants et d’en créer de nouveaux à l’aide du module Microsoft Graph PowerShell.

Automatiser les tâches de provisionnement des utilisateurs avec PowerShell

Les tâches de provisionnement des utilisateurs sont les suivantes :

  • Création d’un compte.
  • Attribution d’une licence.
  • Configuration des méthodes d’authentification.
  • Attribution de permissions.
  • Comment créer un compte utilisateur Microsoft 365

Le processus d’intégration démarre généralement lorsque le service informatique reçoit un ticket du service d’assistance demandant un nouveau compte AD (sur site) ou Microsoft Entra ID, anciennement Azure AD. De nombreuses entreprises synchronisent les comptes à partir de l’AD sur site.

PowerShell peut créer un ou plusieurs comptes d’utilisateurs sur site ou directement dans Microsoft Entra ID. Si vous ajoutez vos utilisateurs à un AD sur site et que vous synchronisez ensuite avec Microsoft Entra ID, vous devez utiliser un processus de provisionnement différent dans PowerShell.

Pour les entreprises uniquement dans le cloud, vous pouvez utiliser Microsoft Graph PowerShell pour créer un compte dans Microsoft Entra ID, comme le montre le code suivant :

$scopes = @(
    "User.ReadWrite.All"
    "Directory.ReadWrite.All"
)
Connect-MgGraph -Scopes $scopes
$password = @{ Password = '<Password>' }
New-MgUser `
    -DisplayName '<Display Name>' `
    -PasswordProfile $password `
    -AccountEnabled `
    -MailNickName '<Mail Nickname>' `
    -UserPrincipalName '<Username>@<Domain>.onmicrosoft.com'

Si vous devez créer plusieurs comptes, vous pouvez importer un fichier de valeurs séparées par des virgules (CSV) et répéter les mêmes étapes pour chaque entrée :

$users = Import-Csv -Path "C:\User.csv"
$tempPassword = @ { Password = '<Password>' }

foreach ($user in $users)
{
    New-MgUser `
    -DisplayName $user.DisplayName `
    -PasswordProfile $tempPassword `
    -AccountEnabled `
    -MailNickName $user.MailNickName `
    -UserPrincipalName '$($user.Username)@<Domain>.onmicrosoft.com'
}

Comment attribuer des licences avec PowerShell ?

Après avoir créé des comptes, vous devez attribuer des licences. Il est conseillé d’utiliser autant que possible l’attribution de licences par groupe. Avec la méthode PowerShell, vous devez attribuer la licence directement au compte afin qu’il ait accès aux services requis :

# Connect with the required permissions
$scopes = @(
    "Group.ReadWrite.All"
    "GroupMember.ReadWrite.All"
)
Connect-MgGraph -Scopes $scopes

$user = Get-MgUser `
    -ConsistencyLevel eventual `
    -Search '"UserPrincipalName:<Username>"'

$license = Get-MgSubscribedSku -All | `
    Where SkuPartNumber -eq 'EMSPREMIUM'

Set-MgUserLicense -UserId $user.Id `
    -AddLicenses @{SkuId = $license.SkuId} `
    -RemoveLicenses @()

Si vous utilisez la gestion des licences de groupe, mais pas les groupes dynamiques, vous devez affecter l’utilisateur au groupe de sécurité spécifique qui applique ensuite la ou les licences correspondantes :

$user = Get-MgUser `
    -ConsistencyLevel eventual `
    -Search '"UserPrincipalName:<Username>"'

$group = Get-MgGroup `
    -ConsistencyLevel eventual `
    -Filter "startsWith(DisplayName, 'E5 License Group')"

New-MgGroupMember `
    -GroupId $group.Id `
    -DirectoryObjectId $user.Id

Configuration des méthodes d’authentification

Il est essentiel de sécuriser les comptes provisionnés avec des protections d’authentification supplémentaires, telles que l’authentification unique et l’authentification multifactorielle (MFA).

Pour attribuer l’AMF à un utilisateur, vous pouvez soit la définir au niveau du compte, soit utiliser des stratégies d’accès conditionnel pour des utilisateurs et des groupes de sécurité spécifiques. Cette dernière solution est la plus simple pour s’assurer que l’AMF s’applique à un compte.

Le script PowerShell suivant invite l’utilisateur à s’inscrire à la MFA. Si l’utilisateur rejette la demande, le système le rappelle tous les deux jours jusqu’à ce qu’il s’inscrive :

# Connect with the required permissions
$scopes = @(
    "Group.ReadWrite.All"
    "GroupMember.ReadWrite.All"
    "Policy.ReadWrite.AuthenticationMethod"
)
Connect-MgGraph -Scopes $scopes

$user = Get-MgUser `
    -ConsistencyLevel eventual `
    -Search '"UserPrincipalName:<Username>"'

# Enabling Multi-factor Authentication (MFA) Registration
$params = @{
    "@odata.context" = "https://graph.microsoft.com/v1.0/$metadata#authenticationMethodsPolicy"
    RegistrationEnforcement = @{
    AuthenticationMethodsRegistrationCampaign = @{
        SnoozeDurationInDays = 2
        State = "enabled"
        ExcludeTargets = @()
        IncludeTargets = @(
        @{
            Id = $user.Id
            TargetType = "user"
            TargetedAuthenticationMethod = "microsoftAuthenticator"
        })
    }
    }
}

Update-MgPolicyAuthenticationMethodPolicy `
    -BodyParameter $params

Attribuer des autorisations aux utilisateurs avec PowerShell

Après le provisionnement du compte et l’ajout de protections et de licences, l’étape suivante consiste à ajouter des autorisations spécifiques, telles que les rôles de locataire, la sécurité ou les groupes Microsoft 365, au compte.

N’attribuez des rôles de locataire qu’aux utilisateurs qui en ont besoin. Utilisez largement la sécurité et Microsoft 365 Groups pour gérer les autorisations et l’accès aux emplacements, tels que SharePoint Online et Microsoft Teams :

$scopes = @(
    "User.ReadWrite.All"
    "Directory.ReadWrite.All"
    "Sites.Manage.All"
    "RoleManagement.ReadWrite.Directory"
)

# Assigning a Tenant Role to a User
$user = Get-MgUser `
    -ConsistencyLevel eventual `
    -Search '"UserPrincipalName:<Username>"'

$role = Get-MgRoleManagementDirectoryRoleDefinition `
    -UnifiedRoleDefinitionId 62e90394-69f5-4237-9190-012177145e10

$params = @{
    "@odata.type" = "#microsoft.graph.unifiedRoleAssignment"
    RoleDefinitionId = $role.Id
    PrincipalId = $user.Id
    DirectoryScopeId = "/"
}
New-MgRoleManagementDirectoryRoleAssignment `
    -BodyParameter $params

# Assigning an Owner to a Team
$user = "<Username>@<Domain>.onmicrosoft.com"
$owner = Get-MgUser -UserId $user
$properties = @{
    "@odata.type" = "#microsoft.graph.aadUserConversationMember";
    "[email protected]" = "https://graph.microsoft.com/v1.0/users/" + $owner.Id
}
$role = "owner"

$team = Get-MgTeam -TeamId "354d151c-cf85-4202-ba86-1ea47a271968"
New-MgTeamMember `
    -TeamId $team.Id `
    -Roles $role `
    -AdditionalProperties $properties

Gérer les tâches quotidiennes de provisionnement des utilisateurs

L’automatisation PowerShell est également excellente pour le provisionnement de Microsoft 365 au-delà des tâches d’onboarding standard. Voici quelques-unes des tâches les plus courantes :

  • Configurer les paramètres de Microsoft Teams et créer des équipes et des canaux.
  • Configurer les sites SharePoint et OneDrive for Business pour le stockage des fichiers et la collaboration.
  • Configurer les boîtes aux lettres, les alias de messagerie et les autorisations de boîte aux lettres.
  • Mettre en œuvre des politiques de conservation et d’archivage des courriels.
  • Configurer les fonctions de sécurité de la messagerie, telles que les politiques antispam et antihameçonnage.
  • Configurer les politiques de prévention des pertes de données.
  • Générer des rapports.
  • Examiner les journaux d’audit.

En tant qu’offre relativement nouvelle, Microsoft Graph PowerShell peut présenter des lacunes dans sa gamme de fonctions. Dans ce cas, envisagez d’utiliser d’autres modules PowerShell établis ou l’interface utilisateur du portail d’administration :

# Update Microsoft Teams settings
$team = Get-MgTeam -TeamId "354d151c-cf85-4202-ba86-1ea47a271968"
$funSettings = @{ `
    "allowGiphy" = "true"; `
    "giphyContentRating" = "moderate"; `
    "allowStickersAndMemes" = "true"; `
    "allowCustomMemes" = "true"; `
}
Update-MgTeam `
    -TeamId $team.Id `
    -FunSettings $funSettings

# Review the Audit logs
$startDateTime = (Get-Date).AddDays(-7).ToString("yyyy-MM-ddTHH:mm:ssZ")
$endDateTime = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ssZ")
Get-MgAuditLogDirectoryAudit `
    -Filter "activityDateTime ge $startDateTime and activityDateTime le $endDateTime"

Rationaliser l’intégration avec PowerShell et Microsoft Graph

Les modules Microsoft Graph et PowerShell constituent d’excellents moyens de provisionner des éléments dans le locataire Microsoft 365. Le principal avantage pour les administrateurs est de créer des scripts reproductibles et configurables pour un processus d’onboarding des utilisateurs plus fluide et plus rapide. Pour en savoir plus sur l’utilisation de Microsoft Graph, consultez la documentation officielle ici.

Pour approfondir sur Administration de systèmes