EASYENTRA Blog

News & Updates

The Complete Guide to M365 User Onboarding 

The complete guide to M365 user onboarding

Every time a new employee joins, IT teams are expected to provision a fully configured Microsoft 365 account, but it is rarely as simple as it sounds.

What appears to be a straightforward task quickly turns into a multi-step process involving different admin portals, configuration dependencies, and synchronization delays. Each stage introduces friction, increasing both the time required and the risk of human error.

So, what exactly makes Microsoft 365 onboarding so complex, and more importantly, is there an easier way to do it? Let’s break it down.

Why Microsoft 365 User Onboarding Is More Complex Than It Seems

At its core, M365 user provisioning is not just about creating an account. It is a multi-layered process that spans identity management, access control, and service configuration.

A typical onboarding workflow includes:

  • Creating user identity in Entra ID
  • Assigning Microsoft 365 licenses
  • Configuring Exchange Online mailbox settings
  • Adding users to security groups and distribution lists
  • Setting organizational attributes like department, manager, and job title
  • Applying regional and compliance configurations

When combined, these steps form a comprehensive onboarding checklist that often exceeds 18+ manual actions per user.

In hybrid identity environments, the process becomes even more dependent on timing and sequencing. Administrators must wait for Azure AD Connect sync cycles, which can take 15–30 minutes, before continuing with cloud configurations. This delay disrupts workflow continuity and increases operational overhead.

Challenges with Native Microsoft 365 Onboarding Tools

Using standard tools such as the Microsoft 365 Admin Center, Entra Admin Center, and Exchange Admin Center presents several operational challenges:

  • Multiple admin portals – Administrators must switch between different portals to complete a single onboarding process, leading to a fragmented and inefficient experience.
  • High risk of missed configurations – Jumping across portals increases the chances of overlooking critical settings during user provisioning.
  • Manual and time-consuming process – Each user is configured step by step, typically taking 30 to 45 minutes per user, which does not scale well.
  • Inconsistent user provisioning – Different administrators may follow different approaches, resulting in variations in user configurations.
  • Dependency on backend processes – Tasks such as license activation and mailbox provisioning are not immediate and rely on backend processing.
  • Delays due to provisioning cycles – Administrators often need to wait or revisit tasks later, slowing down the overall onboarding workflow.

Automate Microsoft 365 User Onboarding Using PowerShell

To overcome these limitations, many organizations turn to PowerShell automation for Microsoft 365.

PowerShell enables administrators to standardize and streamline onboarding by scripting repetitive tasks into a single, reusable workflow. Instead of navigating multiple portals, everything can be executed in one controlled process.

Below is a complete example script that automates user creation, licensing, group assignment, and mailbox configuration:

#   Install-Module Microsoft.Graph -Scope CurrentUser -Force
#   Install-Module ExchangeOnlineManagement -Scope CurrentUser -Force
[CmdletBinding(SupportsShouldProcess)]
param (
    [string]$FirstName   = "Alex",
    [string]$LastName    = "Morgan",
    [string]$JobTitle    = "IT Administrator",
    [string]$Department  = "IT",
    [string]$ManagerUPN  = "admin@contoso.com",
    [string]$UPNDomain   = "contoso.com",
    [string]$LicenseSku  = "DEVELOPERPACK_E5", # Get with Get-MgSubscribedSku
    [string[]]$Groups    = @(),
    [string]$UsageLocation = "US", # Required for licensing
)
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$UPN          = "$($FirstName.ToLower()).$($LastName.ToLower())@$UPNDomain"
$DisplayName  = "$FirstName $LastName"
$MailNickname = "$($FirstName.ToLower()).$($LastName.ToLower())"
Add-Type -AssemblyName System.Web
$TempPassword = [System.Web.Security.Membership]::GeneratePassword(16, 4)
# Connect
Write-Host "Connecting to Microsoft Graph..." -ForegroundColor Cyan
Connect-MgGraph -Scopes "User.ReadWrite.All","Group.ReadWrite.All","Directory.ReadWrite.All" -NoWelcome
Write-Host "Connecting to Exchange Online..." -ForegroundColor Cyan
Connect-ExchangeOnline -ShowBanner:$false
# License
$sku = Get-MgSubscribedSku | Where-Object { $_.SkuPartNumber -eq $LicenseSku }
if (-not $sku) { throw "SKU '$LicenseSku' not found in tenant. Run Get-MgSubscribedSku to verify." }
# Create user
Write-Host "Creating user $UPN..." -ForegroundColor Cyan
$newUser = New-MgUser `
    -DisplayName $DisplayName `
    -GivenName $FirstName `
    -Surname $LastName `
    -UserPrincipalName $UPN `
    -MailNickname $MailNickname `
    -JobTitle $JobTitle `
    -Department $Department `
    -UsageLocation $UsageLocation `
    -AccountEnabled:$true `
    -PasswordProfile @{ Password = $TempPassword; ForceChangePasswordNextSignIn = $true }
# Assign license
Write-Host "Assigning license: $LicenseSku..." -ForegroundColor Cyan
Set-MgUserLicense -UserId $newUser.Id -AddLicenses @(@{ SkuId = $sku.SkuId }) -RemoveLicenses @() | Out-Null
# Set manager
Write-Host "Setting manager: $ManagerUPN..." -ForegroundColor Cyan
try {
    $manager = Get-MgUser -UserId $ManagerUPN
    Set-MgUserManagerByRef -UserId $newUser.Id -BodyParameter @{
        "@odata.id" = "https://graph.microsoft.com/v1.0/users/$($manager.Id)"
    }
} catch { Write-Warning "Could not set manager: $_" }
# Add to groups
foreach ($g in $Groups) {
    try {
        $group = Get-MgGroup -Filter "mail eq '$g' or displayName eq '$g'" | Select-Object -First 1
        if (-not $group) { $group = Get-MgGroup -GroupId $g }
        New-MgGroupMember -GroupId $group.Id -BodyParameter @{
            "@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/$($newUser.Id)"
        }
        Write-Host "  Added to: $($group.DisplayName)" -ForegroundColor Green
    } catch { Write-Warning "Could not add to group '$g': $_" }
}
# Mailbox settings — retry until provisioned (up to 5 min)
Write-Host "Waiting for mailbox to provision..." -ForegroundColor Cyan
$maxAttempts = 10
$attempt = 0
$mailboxReady = $false
while (-not $mailboxReady -and $attempt -lt $maxAttempts) {
    $attempt++
    Write-Host "  Attempt $attempt/$maxAttempts..." -ForegroundColor DarkGray
    Start-Sleep -Seconds 30
    try {
        Set-MailboxRegionalConfiguration -Identity $UPN -Language "en-US" -TimeZone "UTC" -ErrorAction Stop
        $mailboxReady = $true
        Write-Host "  Mailbox ready and configured." -ForegroundColor Green
    } catch {
        if ($attempt -eq $maxAttempts) {
            Write-Warning "Mailbox not provisioned after 5 minutes. Run manually later:`n  Set-MailboxRegionalConfiguration -Identity $UPN -Language en-US -TimeZone UTC"
        }
    }
}
# Done
Write-Host ""
Write-Host "Done." -ForegroundColor Green
Write-Host "  UPN           : $UPN"
Write-Host "  Temp Password : $TempPassword"
Write-Host "  License       : $LicenseSku"
Disconnect-MgGraph | Out-Null
Disconnect-ExchangeOnline -Confirm:$false | Out-Null

While this approach significantly reduces manual effort, it still requires scripting knowledge and ongoing maintenance.

A Smarter Alternative: Simplify Microsoft 365 Onboarding with EasyEntra

While PowerShell automation in Microsoft 365 is useful, it does have its challenges. It requires scripting knowledge, and even small mistakes can cause issues during user setup.

Over time, maintaining scripts, keeping them updated, and helping others use them can become difficult. Fixing problems, especially when tools like Microsoft Graph PowerShell change, often needs extra expertise. And this is exactly where EasyEntra transforms the onboarding experience!

Create a Virtual User Template in EasyEntra

With EasyEntra Virtual User Templates, the entire onboarding process is no longer a sequence of manual or scripted steps. Instead, all configurations are captured once in a reusable template that acts as a blueprint for user creation. This not only saves time but also reduces the chances of manual errors during account creation.

These templates encapsulate every aspect of M365 user provisioning, including identity attributes, licensing, group memberships, mailbox configuration, regional settings, and profile enrichment. In essence, all onboarding steps are predefined and standardized.

To set up a template, follow these steps:

  • Right-click an existing user that reflects the desired configuration and choose Create Template.

  • Provide a suitable name and, if needed, a short description.

  • Proceed to review and adjust user properties as required.

  • Ensure all related attributes are updated if you modify the name (such as UPN, email alias, and display name).

  • Click Create to finalize the template.

Create a User from a Virtual Template

Once a template is in place, provisioning new users becomes much faster and more consistent. EasyEntra automatically applies predefined formats for naming, email addresses, and account settings, allowing administrators to onboard users with minimal effort while maintaining uniformity across the organization.

To create a new user from a template:

  • Right-click the required template and select Create User.
  • Enter the display name, which drives the rest of the naming attributes.
  • Add any unique details, such as a mobile phone number, profile image, or employee ID, if needed.
  • Click Create to complete the user setup.

Create a Hybrid User Using PowerShell

EasyEntra Virtual User Templates also support automated user creation through PowerShell. This approach is ideal for bulk onboarding or scheduled provisioning, as it combines consistency and automation. It also enables administrators to integrate additional steps into the process for more advanced scenarios.

To create a hybrid user via PowerShell:

  • Open a PowerShell 7 session using your EasyEntra credentials.
  • Run the command: Invoke-EECreateHybridUserFromTemplate -DisplayName <string> -TemplateName <string>
  • Review the output to confirm the operation status.
  • Optionally store the result in a variable for further validation or automation.
  • If scheduling the task, ensure it runs under a properly configured user profile with the required permissions.

Free 30-minute demo

try 30 days for free

GET EASYENTRA NEWS

Opt out at any time

“One of the best products I've used.”
Gary Shurland
Chief Information Officer, Mirick, United States
“This tool has been invaluable in streamlining our IT processes.”
Tyson Mckay
Chief Information Officer, Southwest Network, United States
“This product has been a miracle for our Help Desk. EasyEntra has completely transformed how we handle Microsoft 365 administration.”
Doug Sanders
Manager of Technical Customer Support, Junior Achievement USA, United States
“Your product is such a time saver. I love it!”
Scott Fehr
IT Infrastructure, MEC Aerial Work Platforms, United States
“It's a good product and saves us lots of time for these ongoing quick admin tasks.” 
Chris McFerran
Managing Director, CTech IT Solutions Ltd, United Kingdom
“EasyEntra has significantly streamlined our workflow, simplifying everything. It feels almost like a revolution.”
Johan Sadelius
IT-chef, Arjeplog Kommun, Sweden
I greatly appreciate your assistance and willingness to enhance the already outstanding product.”
Michael I. Wilson
Executive Director of Information Technology, Archdiocese Of Washington, United States
“It's great not having to switch back and forth between the O365 admin center and the Teams admin center to assign groups. I am sold!”
Thomas Madden
Director Information Technology, AutoPayPlus, United States
“I would highly recommend organizations use the solution as it greatly simplifies various tasks.”
S. Roger Singh
Chief Technology Officer, Prasad & Company LLP, Canada
“EasyEntra is time-saving. Love the copy/paste for user/computer groups and the copy to new user.”
Damian Nita
Associate Network Administrator, Shenandoah Valley Westminster-Canterbury, United States
“EasyEntra has transformed our daily IT operations by simplifying user management, reducing errors, and enhancing overall efficiency.”
Henrik Nefling
IT- and Digitalization Manager, Animal Protection Denmark, Denmark