Get Office 365 users licenses

Remember to install MSOnline module before running script.

#Provide directory path and prefix for output files
$LogDirectory = "c:\Temp\"
$LogFileName = "Office_365_License_"
if(!(Test-Path $LogDirectory))
    Write-Host "Provided directory was not found, directory will be created now..."
    New-Item -Path $LogDirectory -ItemType Directory
Import-Module MSOnline
Write-Host "Connecting to Office 365..."
# Get a list of all licences available for tenant and gahter users which have license assigned
$LicenseTypes = Get-MsolAccountSku | Where {$_.ConsumedUnits -ge 1}
$Users = Get-MsolUser -All| Where-Object {$_.isLicensed -eq "True"}
foreach ($license in $LicenseTypes) 
    Write-Host "Gathering users with license " $LicenseName -ForegroundColor Green
    $AccountsArray = @()
    $LicenseName = $license.AccountSkuId
    $FileLicenseName = $license.accountskuid.Replace(':','')
    # Gather accounts which have specific license assigned
    $Accounts = $Users | Where-Object {$_.licenses.accountskuid -contains $LicenseName}
    foreach ($Account in $Accounts) {
        $thislicense = $Account.licenses | Where-Object {$_.accountskuid -eq $LicenseName}
        $Properties =  @{
         "UserPrincipalName" = $Account.UserPrincipalName
         "DisplayName" = $Account.DisplayName
         "AccountSku" = $LicenseName
        foreach ($row in $($thislicense.servicestatus)) {
        $AccountArrayRow = New-Object PSObject -Property $Properties
        $AccountsArray += $AccountArrayRow
    $FileName = ($LogDirectory+$LogFileName+$FileLicenseName)
    $AccountsArray | Export-CSV -Path $FileName'.csv' -NoTypeInformation
    Write-Host "Export to file for license $LicenseName completed" -ForegroundColor Green
Write-Host ("Output files available under " + $LogDirectory) -ForegroundColor Green


Leave a Reply

Your email address will not be published. Required fields are marked *