PowerShell Report of Office 365 Licenses Assignments

In the last post, we talked about reporting how many users you created yesterday or in last 7 days or may be in last six months. A similar requirement is to know how many Office 365 licenses you assigned in last 24 hrs or in last 7 days. Not really perfect way of reporting the same but a workaround PowerShell script for the same purpose might be as given below:

# !Author! Nitish Kumar

$file = "c:\temp\NewUsersLicense_$((Get-Date).ToString('MM-dd-yyyy_hh-mm-ss')).csv"
# If Okay with storing password in the script
$User = "DummyUserName"
$password = 'DummyPassword' | ConvertTo-SecureString -asPlainText -Force
$cred= New-Object System.Management.Automation.PSCredential ($User, $password )

# Uncomment the below line and comment three lines above it if want to take credentials as input
# $cred = Get-Credential
$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $cred -Authentication Basic –AllowRedirection
Import-PSSession $s

Get-Mailbox -resultsize unlimited | where {$_.WhenMailboxCreated -gt (get-date).adddays(-1)} |Select-Object DisplayName,UserPrincipalName,WindowsEmailAddress,whenMailboxCreated,MailboxPlan | Export-Csv "$file" -noTypeInformation

$style = "
<style>BODY{font-family: Arial; font-size: 10pt;}"
$style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}"
$style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }"
$style = $style + "TD{border: 1px solid black; padding: 5px; }"
$style = $style + "</style>

"

$smtpServer = "Your SMTP Server URL/ IP"
$att = new-object Net.Mail.Attachment($file)
$msg = new-object Net.Mail.MailMessage
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$msg.From = "Your_From_Email_ID here"
$msg.To.Add("Your_To_Email_ID here")
$msg.Subject = "Report of Licenses assigned in last 24 hrs"
$body = "<b>Dear Team</b>"
$body += "Attached are the Report of Licenses assigned in last 24 hrs"
$body += Import-Csv -Path $file | ConvertTo-Html -Head $style
$body += ""
$body += "<b>Regards</b>"
$msg.Body = $body
$msg.IsBodyHTML = $true
$msg.Attachments.Add($att)
$smtp.Send($msg)
$att.Dispose()

#End of script

The issue with the above script is only one, it needs the password in Plain Text to be stored in the script to be automated and in case one doesn’t want it to be automated then can work with the alternate way mentioned in the script (Commented right now).