In this tutorial, I am going to show you how you can use a Microsoft Graph PowerShell script to export a list of all your users and their license details to a CSV file.
This is useful as currently, the Microsoft 365 admin portal does not provide the functionality to perform this task. Where as you can achieve the desired results with this script.
Pre-requisites
To be able to run the script to export all users you will need to have the Microsoft Graph PowerShell module installed. See my tutorial here for how to install the Microsoft Graph PowerShell module.
You should also have access to a global administrator account to delegate the required permissions to Microsoft Graph PowerShell when connecting.
Export all Office 365 users and license details using Microsoft Graph PowerShell
The script utilises the Get-MgUser cmdlet, which can be found in the Microsoft.Graph.Users PowerShell module and can be called with the User.Read.All permission. To learn more about the Get-MgUser cmdlet, check out my tutorial: How To Use Get-MgUser with Microsoft Graph PowerShell
To create the report including all users and their licenses, follow the below steps:
1. Open up a text editor.
2. Copy and paste the below code into your text editor.
3. Edit the final line of code to change the location of the report: “C:\temp\licensedusers.csv”.
4. Copy and paste the complete script directly into PowerShell.
5. When prompted, sign in to the interactive login prompt with your global administrator credentials and accept the delegated permissions.
Import-Module Microsoft.Graph.Users, Microsoft.Graph.Identity.DirectoryManagement
Connect-MgGraph -Scope User.read.all, DeviceManagementConfiguration.Read.All
$CompanyName = (Get-MgOrganization | Select VerifiedDomains).verifieddomains | Where-Object {$_.IsDefault -eq "True"}
$Users = Get-MgUser -all
$Report = [System.Collections.Generic.List[Object]]::new()
Write-host "Found $($users.count) users for $($CompanyName.Name)" -ForegroundColor Cyan
ForEach ($user in $Users) {
Write-Host "Retrieving license info for $($User.DisplayName)" -ForegroundColor yellow
If (Get-MgUserLicenseDetail -USerId $User.id) {
$licenses = $null
$licenses = (Get-MgUserLicenseDetail -UserId $User.id).SkuPartNumber -join ", "
Write-Host "Licenses found for $($User.DisplayName): $licenses" -ForegroundColor cyan
$obj = [pscustomobject][ordered]@{
DisplayName = $user.DisplayName
UserPrincipalName = $user.UserPrincipalName
Licenses = $licenses
}
$report.Add($obj)
} else {
Write-Host "No licenses found for $($User.DisplayName)" -ForegroundColor Red
}
}
$report | Export-CSV "C:\temp\licensedusers.csv" -NoTypeInformation
Once you have run the script you should find the .csv file located in the area you defined in the script. If you left the script as default, you will find it in C:\temp.
Your user report will look like the following once opened:
Hi, to add the user’s company and job title fields, what should I add in the script?
You can use this section of code instead: 🙂
$obj = [pscustomobject][ordered]@{
DisplayName = $user.DisplayName
UserPrincipalName = $user.UserPrincipalName
JobTitle = $user.JobTitle
Licenses = $licenses
}
Thank you; I would also like to add the company field; I tried to add
Company = $user.CompanyName
but it does not work