A Practical First Workflow for Microsoft 365 Administration with Microsoft 365
Learn Microsoft 365 administration from first principles: assign a licence via group-based licensing, validate the result, and roll it back safely.

In this lesson
Table of Contents
Table of contents
Before you begin
- Access to an isolated or non-production Microsoft 365 tenant reserved for validation exercises.
- An administrative account holding the least privileged role needed for the task (License Administrator plus User Administrator).
- Confirmed product version and permissions before applying any change.
Track this tutorial
Choose your current status and tick each safety check as you complete it. Sign in to sync progress between devices.
Current status
Before you apply the change
Confirm these production-safety controls during the tutorial.
Microsoft 365 administration is the discipline of managing identity, licensing and service configuration for an organisation’s cloud productivity tenant. At the centre of that discipline sits Microsoft Entra ID
This guide walks through one bounded, reversible workflow: assigning a Microsoft 365 licence to a test user through group-based licensing, confirming that assignment with observable evidence, and then rolling it back cleanly. The exercise uses a single test account inside an isolated or non-production tenant, avoids any irreversible action, and asks for only the least privilege needed to complete the task. Every command is explained before it runs, every result is interpreted rather than assumed, and the guide closes by connecting the lab exercise to the permission boundaries, security controls and escalation habits that matter once the same workflow is repeated in a live production tenant.
#Learning Objectives
- Explain how Microsoft Entra ID directory objects, licence SKUs and service plans relate to one another inside a Microsoft 365 tenant.
- Identify the administrative roles and permission scopes needed to view, assign and remove Microsoft 365 licences without over-privileging the session.
- Assign a Microsoft 365 licence to a test user through group-based licensing and produce observable evidence of the outcome.
- Diagnose common licence assignment failures using directory and licence status evidence rather than guesswork.
- Roll back a licence assignment cleanly and confirm the tenant has returned to its starting state.
#Prerequisites
- Access to an isolated or non-production Microsoft 365 tenant reserved for validation exercises — not a live production tenant.
- An administrative account holding the least privileged role needed for the task, typically License Administrator combined with User Administrator, rather than Global Administrator.
- Confirmation of the current product version and permissions before applying any change, including the account’s assigned role and the tenant’s available licence SKUs.
- PowerShell 7 or later with the Microsoft Graph PowerShell SDK module installed, and consent to the Graph scopes used in this guide.
- Basic familiarity with directory concepts (users, groups, roles) is helpful; each term is defined before it is used.
#Content
#The Microsoft 365 Administrative Mental Model
Every Microsoft 365 tenant is built around a single Microsoft Entra ID directory. A directory object — most often a user or a group — is the anchor for almost every administrative action: assigning a licence, granting a role or applying a Conditional Access policy all mean attaching a property or relationship to that object. A licence SKU (a ‘subscribed SKU’ in Graph terminology) bundles a set of service plans; assigning the SKU to a user is what turns on access to the underlying services, such as Exchange Online mailboxes or Teams. Because the Microsoft 365 admin center, the Microsoft Entra admin center and the Microsoft Graph PowerShell SDK all read and write the same directory through the same Microsoft Graph API, a change made in one surface is visible — eventually — in the others. Understanding that convergence prevents a common early mistake: assuming the portal and PowerShell describe two different states of the tenant.

#Components, Dependencies and Trust Boundaries
Three components matter for this workflow. First, the user object, which must carry a valid UsageLocation property — a two-letter country code — before any licence can be assigned to it, because licence availability is scoped by region for compliance reasons. Second, the group object used for group-based licensing, which holds a link to one or more licence SKUs; membership of that group is what drives assignment, rather than the licence being attached to the user directly. Third, the administrative session itself, which operates under delegated permissions: when a signed-in administrator runs a Graph PowerShell command, the call carries that administrator’s own consented scopes and is recorded against their identity in the audit log. This is a meaningful trust boundary — it differs from an application (service principal) making the same call under its own, potentially broader, permissions. For this exercise, keeping the session delegated and scoped to User.ReadWrite.All, Group.ReadWrite.All and User.Read.All keeps the blast radius of any mistake bound to what a single administrator can already do, and keeps the change attributable.
#Group-Based Licensing as a Safer Assignment Pattern
Microsoft 365 supports two licence assignment patterns: direct assignment, where a SKU is attached straight to a user object, and group-based licensing, where a SKU is attached to a group and every current and future member inherits it. Group-based licensing is generally the safer default for anything beyond a handful of users, because membership changes are easier to audit and reverse than scattered direct assignments. It has one property that is easy to misunderstand, however: adding a user to a licensed group is not the same event as the licence successfully provisioning. Assignment is processed asynchronously, and if the group’s associated SKU has no available units, or a required service plan cannot be enabled for that user, the assignment enters an error state that is visible on the user’s licence details but does not block the group membership itself. In other words, group membership succeeding tells you nothing conclusive about licence provisioning succeeding — that always has to be checked separately, which is the basis for the worked example and exercise below.
#Examples
Worked example: assigning a licence through group membership. Before making any change, the baseline state of the test account is recorded:
Input: Get-MgUser -UserId 'testuser@yourtenant.onmicrosoft.com' -Property UsageLocation,AssignedLicenses
Output: a user object showing UsageLocation: 'GB' and an empty AssignedLicenses collection.
Interpretation: the usage location prerequisite is already satisfied and no licence is currently attached, which confirms a clean starting point before the exercise proceeds.
The test user is then added to the licensing group with New-MgGroupMember -GroupId $groupId -DirectoryObjectId $userId. This command returns no console output on success, which only confirms that the membership write succeeded — not that a licence has provisioned. After allowing a short interval for processing, the licence state is checked directly:
Input: Get-MgUserLicenseDetail -UserId $userId
Output: a licence detail object naming the target SKU, with a ServicePlans array in which each entry shows ProvisioningStatus: 'Success'.
Interpretation: the licence has propagated from the group to the user and every service plan has provisioned successfully. This — not the earlier membership write — is the observable evidence that the workflow succeeded.
#Exercises
Exercise: assign and validate a test licence via group-based licensing.
Objective: assign one licence SKU to a single test user through group membership and produce verifiable evidence of successful provisioning.
Setup: an isolated or non-production tenant; a test user account with UsageLocation already set; an existing security group configured for group-based licensing with at least one available unit of the target SKU; an administrative session connected with the License Administrator and User Administrator roles and the Graph scopes listed above.
Steps: record the baseline with Get-MgUser; add the test user to the licensing group with New-MgGroupMember; wait briefly for propagation; confirm the outcome with Get-MgUserLicenseDetail.
Expected evidence: the licence detail response lists the target SKU with each relevant service plan showing ProvisioningStatus: 'Success'.
Pass condition: the expected service plans reach Success within a reasonable wait. Microsoft’s own documentation notes that assignment is not instantaneous; the exact timing is tenant- and version-dependent and should be confirmed locally rather than assumed.
Stop condition: if the licence shows an error state — visible via the Licenses page in the Microsoft 365 admin center or via the user’s licence assignment states in Graph — stop before adding further users to the group, and diagnose the cause first.
Cleanup: remove the test user from the group with Remove-MgGroupMemberByRef, confirm with Get-MgUserLicenseDetail that the licence has been removed, and delete the test account if it was created solely for this exercise.

#Validation Guidance
Validation in Microsoft 365 administration means confirming state, not inferring it from a command’s exit code. A PowerShell cmdlet returning without error tells you the request was accepted; it does not tell you the requested effect actually happened, particularly for anything that depends on asynchronous processing such as licence provisioning or Conditional Access policy evaluation. The safer habit is to treat every state-changing command as a hypothesis and every subsequent read as the test of that hypothesis.
For this workflow, that means checking licence state directly with Get-MgUserLicenseDetail rather than trusting that group membership implies a licence, and periodically cross-checking the same account in the Microsoft 365 admin center to confirm both surfaces agree. Where they disagree immediately after a change, the more likely explanation is propagation delay rather than failure; where they still disagree after a reasonable wait, that discrepancy itself becomes the thing to investigate.
#Common Mistakes
- Assuming group membership equals licence assignment. The group add can succeed while the licence itself fails to provision if the group’s SKU has no available units. Check licence assignment states directly rather than assuming success from membership alone.
- Forgetting to set the usage location. Most licence SKUs cannot be assigned to a user without a valid
UsageLocation, for regional compliance reasons. Set this before attempting assignment, not after diagnosing a failure. - Using Global Administrator for routine licence tasks. This is not itself a technical fault, but it needlessly widens the blast radius of a mistake and makes the audit trail harder to reason about. Use the scoped License Administrator and User Administrator roles instead.
- Treating the admin center and PowerShell as always synchronised. Directory and licence changes propagate asynchronously; a portal view that has not yet refreshed is not evidence that a PowerShell change failed.
#Production Bridge
The permissions used in this lab are deliberately narrow, and that narrowness should carry through to production. In a live tenant, the same workflow should be performed under a role that is granted just for the duration of the task — for example through Microsoft Entra Privileged Identity Management — rather than as a standing assignment held indefinitely. A standing License Administrator or Global Administrator assignment is a persistent target; a time-bound, justified activation is not.
Conditional Access is a second boundary that will often interact with this workflow in production. If an administrative sign-in is blocked by a Conditional Access policy — because of an unmanaged device, an unexpected location or a session control — that is normally the policy doing its job, not a fault to be worked around. The correct response is to use the approved administrative access path (a compliant device, an approved network, a break-glass process) and, if none is available, escalate to the identity or security team rather than attempting to bypass the control.
Finally, every licence and group membership change in a production tenant is recorded in Microsoft Entra audit logs. Before repeating this workflow outside a lab, confirm who reviews those logs, what change-approval process applies to licence and group changes in your organisation, and who owns licence inventory — so that a genuine shortage of available units is escalated to that owner rather than resolved by reassigning licences from an unrelated pool.
#Key Takeaways
- Microsoft 365 administration surfaces (admin center, Entra admin center, Graph PowerShell) all read and write the same underlying directory through Microsoft Graph.
- A licence cannot be assigned without a valid usage location on the user object, and group-based licensing propagates asynchronously rather than instantly.
- Group membership succeeding is not evidence that a licence has provisioned; the licence detail response is the evidence that matters.
- Least privilege, time-bound role activation and Conditional Access are trust boundaries to work within, not obstacles to route around.
- Every state-changing step in this workflow has a corresponding, tested rollback: removing group membership reverses the licence assignment cleanly.
Carried into production with the same discipline — scoped roles, checked evidence and a tested rollback path — this bounded licensing workflow becomes a template for handling larger batches of Microsoft 365 identity and licence changes without turning a routine task into an unplanned outage.
Comments
Add a thoughtful note on A Practical First Workflow for Microsoft 365 Administration with Microsoft 365. Comments are checked for spam and held for moderation before appearing.
Related articles
Enterprise Networking Fundamentals
A Practical First Workflow for Enterprise Networking Fundamentals with TCP/IP
Design, validate and safely roll back a bounded TCP/IP connectivity workflow for enterprise networking, with evidence-based validation steps.
Systems Engineering
Engineering The IT Toolkit for Predictable PowerShell Operations
How to design, validate and safely roll back one bounded PowerShell IT-toolkit workflow, from diagnostic checks to a rate-limited remediation function.
Enterprise IT Management
Engineering Enterprise IT Management for Predictable Microsoft 365 Operations
How to stage, validate and safely roll back a scoped Exchange Online transport rule in Microsoft 365, using audit-only and pilot-enforce gates before any tenant-wide change.
Discover more
Learn More About KBY
About KBY
Learn about our mission, editorial standards, and commitment to trusted engineering knowledge.
Why Trust KBY
Explore the processes and policies that ensure our publications are accurate, useful, and responsible.
Newsletter
Get our latest editorial publications, research and practical insights sent directly to your inbox.
Was this useful?
Build practical engineering skills.
Receive new lessons, learning paths, practical exercises and early-career guidance.