#========================================================================= # 365Licenses.ps1 # VERSION: 1.0 # AUTHOR: Brian Steinmeyer # EMAIL: [email protected] # WEB: https://sigkillit.com # DATE: 4/4/20114 # REQUIREMENTS: # 1) Microsoft Online Services Sign-In Assistant for IT Professionals # -(http://www.microsoft.com/en-gb/download/details.aspx?id=28177) # 2) Windows Azure Active Directory Module for Windows PowerShell # -(http://technet.microsoft.com/en-us/library/jj151815.aspx#bkmk_installmodule) # COMMENTS: This script is intended to retrieve Office 365 licensing information # by accepted domains. It will provide the active license count by domain, # estimate the cost per domain, and provide the number of unused licenses. #========================================================================= # ------ SCRIPT CONFIGURATION ------ # Define License Unit Cost $intCost = 3.88 # ------ END CONFIGURATION ------ # Connect to Microsoft Online write-host "Connecting to Office 365..." Import-Module MSOnline Try { Connect-MsolService -ErrorAction Stop } Catch { Write-Host $error[0].Exception -ForegroundColor Red -BackgroundColor Black Write-Host "Error Connecting to Office 365... Quitting Script!" -ForegroundColor Red -BackgroundColor Black Break } # Get Office 365 Accepted Domains and Active User Licenses Try { $arrDomains = @(Get-MsolDomain) } Catch { Write-Host "Error Retrieving Office 365 Accepted Domains... Quitting Script!" -ForegroundColor Red -BackgroundColor Black Break } $arrCompany = @() $TotalLicenses = 0 $TotalCost = 0 foreach ($d in $arrDomains){ $domain = $d.Name write-host ("PROCESSING: " + $domain.ToUpper()) $users = Get-MsolUser -All | where {$_.isLicensed -eq "True" -and $_.UserPrincipalName.Contains($domain)} | Select DisplayName, UserPrincipalName -ExpandProperty Licenses | Select DisplayName, UserPrincipalName, AccountSkuID If ($users.count -ne $null){ $i = $users.count $users | format-table $users | Export-Csv ("365_Licenses_" + $domain.replace(".","_") + ".csv") } Else{ $i = 0 Write-Host "0 Licenses<code>n</code>n" } $objCompany = New-Object -TypeName PSObject $objCompany | Add-Member -Name 'Domain' -MemberType Noteproperty -Value $domain $objCompany | Add-Member -Name 'Licenses' -MemberType Noteproperty -Value $i $objCompany | Add-Member -Name 'Cost' -MemberType Noteproperty -Value ("{0:C2}" -f ($i * $intCost)) $arrCompany += $objCompany $TotalLicenses += $i $TotalCost += ($i * $intCost) } # Get Company Licensing Info Try { $companyLicenses = Get-MsolAccountSku | Select AccountSkuId, ActiveUnits, WarningUnits, ConsumedUnits } Catch { Write-Host $error[0].Exception -ForegroundColor Red -BackgroundColor Black Write-Host "Error Retrieving Office 365 Account Info... Quitting Script!" -ForegroundColor Red -BackgroundColor Black Break } $objCompany = New-Object -TypeName PSObject $objCompany | Add-Member -Name 'Domain' -MemberType Noteproperty -Value "TOTAL ACTIVE LICENSES" $objCompany | Add-Member -Name 'Licenses' -MemberType Noteproperty -Value $TotalLicenses $objCompany | Add-Member -Name 'Cost' -MemberType Noteproperty -Value ("{0:C2}" -f $TotalCost) $arrCompany += $objCompany $unusedLicenses = ($companyLicenses.ActiveUnits - $companyLicenses.ConsumedUnits) $unusedCost = ($unusedLicenses * $intCost) $objCompany = New-Object -TypeName PSObject $objCompany | Add-Member -Name 'Domain' -MemberType Noteproperty -Value "TOTAL UNUSED LICENSES" $objCompany | Add-Member -Name 'Licenses' -MemberType Noteproperty -Value $unusedLicenses $objCompany | Add-Member -Name 'Cost' -MemberType Noteproperty -Value ("{0:C2}" -f $unusedCost) $arrCompany += $objCompany $objCompany = New-Object -TypeName PSObject $objCompany | Add-Member -Name 'Domain' -MemberType Noteproperty -Value "GRAND TOTAL LICENSES" $objCompany | Add-Member -Name 'Licenses' -MemberType Noteproperty -Value $companyLicenses.ActiveUnits $objCompany | Add-Member -Name 'Cost' -MemberType Noteproperty -Value ("{0:C2}" -f ($companyLicenses.ActiveUnits * $intCost)) $arrCompany += $objCompany # Display Statistics $companyLicenses | Format-Table -Auto $arrCompany | Format-Table -Auto