mirror of
https://github.com/admindroid-community/powershell-scripts.git
synced 2025-12-18 08:55:19 +00:00
M365 License Management and Reporting Tool
This commit is contained in:
parent
5a47ba103d
commit
9160af0f4a
@ -22,6 +22,7 @@ Change Log
|
|||||||
V1.0 (Sep 08, 2022) - File created
|
V1.0 (Sep 08, 2022) - File created
|
||||||
V2.0 (Mar 10, 2025) - Upgraded from MS Graph beta to production version
|
V2.0 (Mar 10, 2025) - Upgraded from MS Graph beta to production version
|
||||||
V2.1 (Mar 21, 2025) - Feature break due to module upgrade fixed.
|
V2.1 (Mar 21, 2025) - Feature break due to module upgrade fixed.
|
||||||
|
V2.2 (Mar 26, 2025) - Used 'Property' param to retrive user properties.
|
||||||
|
|
||||||
|
|
||||||
For detailed Script execution: https://o365reports.com/2022/09/08/manage-365-licenses-using-ms-graph-powershell
|
For detailed Script execution: https://o365reports.com/2022/09/08/manage-365-licenses-using-ms-graph-powershell
|
||||||
@ -211,9 +212,10 @@ Function main() {
|
|||||||
Switch ($GetAction) {
|
Switch ($GetAction) {
|
||||||
1 {
|
1 {
|
||||||
$OutputCSVName = ".\O365UserLicenseReport_$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv"
|
$OutputCSVName = ".\O365UserLicenseReport_$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv"
|
||||||
|
$RequiredProperties=@('UserPrincipalName','DisplayName','AccountEnabled','Department','JobTitle','AssignedLicenses')
|
||||||
Write-Host Generating licensed users report...
|
Write-Host Generating licensed users report...
|
||||||
$ProcessedCount = 0
|
$ProcessedCount = 0
|
||||||
Get-MgUser -All | Where-Object {($_.AssignedLicenses.Count) -ne 0 } | ForEach-Object {
|
Get-MgUser -All -Property $RequiredProperties | Where-Object {($_.AssignedLicenses.Count) -ne 0 } | ForEach-Object {
|
||||||
$ProcessedCount++
|
$ProcessedCount++
|
||||||
Get_UserInfo
|
Get_UserInfo
|
||||||
Write-Progress -Activity "`n Processed users count: $ProcessedCount "`n" Currently Processing: $DisplayName"
|
Write-Progress -Activity "`n Processed users count: $ProcessedCount "`n" Currently Processing: $DisplayName"
|
||||||
@ -228,9 +230,10 @@ Function main() {
|
|||||||
|
|
||||||
2 {
|
2 {
|
||||||
$OutputCSVName = ".\O365UnlicenedUserReport_$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv"
|
$OutputCSVName = ".\O365UnlicenedUserReport_$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv"
|
||||||
|
$RequiredProperties=@('UserPrincipalName','DisplayName','AccountEnabled','Department','JobTitle','AssignedLicenses')
|
||||||
Write-Host Generating Unlicensed users report...
|
Write-Host Generating Unlicensed users report...
|
||||||
$ProcessedCount = 0
|
$ProcessedCount = 0
|
||||||
Get-MgUser -All | Where-Object {($_.AssignedLicenses.Count) -eq 0 } | ForEach-Object {
|
Get-MgUser -All -Property $RequiredProperties | Where-Object {($_.AssignedLicenses.Count) -eq 0 } | ForEach-Object {
|
||||||
$ProcessedCount++
|
$ProcessedCount++
|
||||||
Get_UserInfo
|
Get_UserInfo
|
||||||
Write-Progress -Activity "`n Processed users count: $ProcessedCount "`n" Currently Processing: $DisplayName"
|
Write-Progress -Activity "`n Processed users count: $ProcessedCount "`n" Currently Processing: $DisplayName"
|
||||||
@ -249,8 +252,9 @@ Function main() {
|
|||||||
}
|
}
|
||||||
Write-Host Getting users with $LicenseName license...
|
Write-Host Getting users with $LicenseName license...
|
||||||
$ProcessedCount = 0
|
$ProcessedCount = 0
|
||||||
|
$RequiredProperties=@('UserPrincipalName','DisplayName','AccountEnabled','Department','JobTitle','AssignedLicenses')
|
||||||
if ($SkuPartNumberHash.Keys -icontains $LicenseName) {
|
if ($SkuPartNumberHash.Keys -icontains $LicenseName) {
|
||||||
Get-MgUser -All | Where-Object{(($_.AssignedLicenses).SkuId) -eq $SkuPartNumberHash[$LicenseName]} | ForEach-Object {
|
Get-MgUser -All -Property $RequiredProperties| Where-Object{(($_.AssignedLicenses).SkuId) -eq $SkuPartNumberHash[$LicenseName]} | ForEach-Object {
|
||||||
$ProcessedCount++
|
$ProcessedCount++
|
||||||
Get_UserInfo
|
Get_UserInfo
|
||||||
Write-Progress -Activity "`n Processed users count: $ProcessedCount "`n" Currently Processing: $DisplayName"
|
Write-Progress -Activity "`n Processed users count: $ProcessedCount "`n" Currently Processing: $DisplayName"
|
||||||
@ -272,8 +276,9 @@ Function main() {
|
|||||||
4 {
|
4 {
|
||||||
$OutputCSVName = "./O365DiabledUsersWithLicense__$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv"
|
$OutputCSVName = "./O365DiabledUsersWithLicense__$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv"
|
||||||
$ProcessedCount = 0
|
$ProcessedCount = 0
|
||||||
|
$RequiredProperties=@('UserPrincipalName','DisplayName','AccountEnabled','Department','JobTitle','AssignedLicenses')
|
||||||
Write-Host Finding disabled users still licensed in Office 365...
|
Write-Host Finding disabled users still licensed in Office 365...
|
||||||
Get-MgUser -All | Where-Object { ($_.AccountEnabled -eq $false) -and (($_.AssignedLicenses).Count -ne 0) } | ForEach-Object {
|
Get-MgUser -All -Property $RequiredProperties| Where-Object { ($_.AccountEnabled -eq $false) -and (($_.AssignedLicenses).Count -ne 0) } | ForEach-Object {
|
||||||
$ProcessedCount++
|
$ProcessedCount++
|
||||||
Get_UserInfo
|
Get_UserInfo
|
||||||
Write-Progress -Activity "`n Processed users count: $ProcessedCount "`n" Currently Processing: $DisplayName"
|
Write-Progress -Activity "`n Processed users count: $ProcessedCount "`n" Currently Processing: $DisplayName"
|
||||||
@ -391,7 +396,7 @@ Function main() {
|
|||||||
|
|
||||||
8 {
|
8 {
|
||||||
$Identity = Read-Host Enter User UPN
|
$Identity = Read-Host Enter User UPN
|
||||||
$UserInfo = Get-MgUser -UserId $Identity
|
$UserInfo = Get-MgUser -UserId $Identity -Property "DisplayName,AssignedLicenses"
|
||||||
#Checking whether the user is available
|
#Checking whether the user is available
|
||||||
if ($UserInfo -eq $null) {
|
if ($UserInfo -eq $null) {
|
||||||
Write-Host User $Identity does not exist. Please check the user name. -ForegroundColor Red
|
Write-Host User $Identity does not exist. Please check the user name. -ForegroundColor Red
|
||||||
@ -424,7 +429,7 @@ Function main() {
|
|||||||
foreach ($Item in $UserNames) {
|
foreach ($Item in $UserNames) {
|
||||||
$UPN = $Item.UPN
|
$UPN = $Item.UPN
|
||||||
$ProcessedCount++
|
$ProcessedCount++
|
||||||
$License = (Get-MgUser -UserId $UPN).AssignedLicenses.SkuId
|
$License = (Get-MgUser -UserId $UPN -Property AssignedLicenses).AssignedLicenses.SkuId
|
||||||
if ($License.count -eq 0) {
|
if ($License.count -eq 0) {
|
||||||
"No License Assigned to this user $UPN" | Out-File $OutputCSVName -Append
|
"No License Assigned to this user $UPN" | Out-File $OutputCSVName -Append
|
||||||
}
|
}
|
||||||
@ -442,7 +447,7 @@ Function main() {
|
|||||||
$License = $SkuPartNumberHash[$Licenses]
|
$License = $SkuPartNumberHash[$Licenses]
|
||||||
$ProcessedCount = 0
|
$ProcessedCount = 0
|
||||||
if ($SkuPartNumberHash.Values -icontains $License) {
|
if ($SkuPartNumberHash.Values -icontains $License) {
|
||||||
Get-MgUser -All | Where-Object { ($_.AssignedLicenses).SkuId -eq $License } | ForEach-Object {
|
Get-MgUser -All -Property UserPrincipalName,AssignedLicenses | Where-Object { ($_.AssignedLicenses).SkuId -eq $License } | ForEach-Object {
|
||||||
$ProcessedCount++
|
$ProcessedCount++
|
||||||
$UPN = $_.UserPrincipalName
|
$UPN = $_.UserPrincipalName
|
||||||
Remove_Licenses
|
Remove_Licenses
|
||||||
@ -459,7 +464,7 @@ Function main() {
|
|||||||
$OutputCSVName = "./O365LicenseRemoval_Log__$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).txt"
|
$OutputCSVName = "./O365LicenseRemoval_Log__$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).txt"
|
||||||
Write-Host Removing license from disabled users...
|
Write-Host Removing license from disabled users...
|
||||||
$ProcessedCount = 0
|
$ProcessedCount = 0
|
||||||
Get-MgUser -All | Where-Object { ($_.AccountEnabled -eq $false) -and (($_.AssignedLicenses).Count -ne 0) } | ForEach-Object {
|
Get-MgUser -All -Property UserPrincipalName,AssignedLicenses,AccountEnabled | Where-Object { ($_.AccountEnabled -eq $false) -and (($_.AssignedLicenses).Count -ne 0) } | ForEach-Object {
|
||||||
$ProcessedCount++
|
$ProcessedCount++
|
||||||
$UPN = $_.UserPrincipalName
|
$UPN = $_.UserPrincipalName
|
||||||
$License = $_.AssignedLicenses.SkuId
|
$License = $_.AssignedLicenses.SkuId
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user