mirror of
https://github.com/admindroid-community/powershell-scripts.git
synced 2025-12-18 00:45:19 +00:00
158 lines
5.5 KiB
PowerShell
158 lines
5.5 KiB
PowerShell
#Using this script administrator can identify all licensed users with their assigned licenses, services, and its status.
|
|
|
|
Param
|
|
(
|
|
[Parameter(Mandatory = $false)]
|
|
[string]$UserNamesFile
|
|
)
|
|
|
|
|
|
Function Get_UsersLicenseInfo
|
|
{
|
|
$LicensePlanWithEnabledService=""
|
|
$FriendlyNameOfLicensePlanWithService=""
|
|
$upn=$_.userprincipalname
|
|
Write-Progress -Activity "`n Exported user count:$LicensedUserCount "`n"Currently Processing:$upn"
|
|
#Get all asssigned SKU for current user
|
|
$Skus=$_.licenses.accountSKUId
|
|
$LicenseCount=$skus.count
|
|
$count=0
|
|
#Loop through each SKUid
|
|
foreach($Sku in $Skus) #License loop
|
|
{
|
|
#Convert Skuid to friendly name
|
|
$LicenseItem= $Sku -Split ":" | Select-Object -Last 1
|
|
$EasyName=$FriendlyNameHash[$LicenseItem]
|
|
if(!($EasyName))
|
|
{$NamePrint=$LicenseItem}
|
|
else
|
|
{$NamePrint=$EasyName}
|
|
#Get all services for current SKUId
|
|
$Services=$_.licenses[$count].ServiceStatus
|
|
if(($Count -gt 0) -and ($count -lt $LicenseCount))
|
|
{
|
|
$LicensePlanWithEnabledService=$LicensePlanWithEnabledService+","
|
|
$FriendlyNameOfLicensePlanWithService=$FriendlyNameOfLicensePlanWithService+","
|
|
}
|
|
$DisabledServiceCount = 0
|
|
$EnabledServiceCount=0
|
|
$serviceExceptDisabled=""
|
|
$FriendlyNameOfServiceExceptDisabled=""
|
|
foreach($Service in $Services) #Service loop
|
|
{
|
|
$flag=0
|
|
$ServiceName=$Service.ServicePlan.ServiceName
|
|
if($service.ProvisioningStatus -eq "Disabled")
|
|
{
|
|
$DisabledServiceCount++
|
|
}
|
|
else
|
|
{
|
|
$EnabledServiceCount++
|
|
if($EnabledServiceCount -ne 1)
|
|
{
|
|
$serviceExceptDisabled =$serviceExceptDisabled+","
|
|
}
|
|
$serviceExceptDisabled =$serviceExceptDisabled+$ServiceName
|
|
$flag=1
|
|
}
|
|
#Convert ServiceName to friendly name
|
|
for($i=0;$i -lt $ServiceArray.length;$i +=2)
|
|
{
|
|
$ServiceFriendlyName = $ServiceName
|
|
$Condition = $ServiceName -Match $ServiceArray[$i]
|
|
if($Condition -eq "True")
|
|
{
|
|
$ServiceFriendlyName=$ServiceArray[$i+1]
|
|
break
|
|
}
|
|
}
|
|
if($flag -eq 1)
|
|
{
|
|
if($EnabledServiceCount -ne 1)
|
|
{
|
|
$FriendlyNameOfServiceExceptDisabled =$FriendlyNameOfServiceExceptDisabled+","
|
|
}
|
|
$FriendlyNameOfServiceExceptDisabled =$FriendlyNameOfServiceExceptDisabled+$ServiceFriendlyName
|
|
}
|
|
#Store Service and its status in Hash table
|
|
$Result = @{'DisplayName'=$_.Displayname;'UserPrinciPalName'=$upn;'LicensePlan'=$Licenseitem;'FriendlyNameofLicensePlan'=$nameprint;'ServiceName'=$service.ServicePlan.ServiceName;
|
|
'FriendlyNameofServiceName'=$serviceFriendlyName;'ProvisioningStatus'=$service.ProvisioningStatus}
|
|
$Results = New-Object PSObject -Property $Result
|
|
$Results |select-object DisplayName,UserPrinciPalName,LicensePlan,FriendlyNameofLicensePlan,ServiceName,FriendlyNameofServiceName,
|
|
ProvisioningStatus | Export-Csv -Path $ExportCSV -Notype -Append
|
|
}
|
|
if($Disabledservicecount -eq 0)
|
|
{
|
|
$serviceExceptDisabled ="All services"
|
|
$FriendlyNameOfServiceExceptDisabled="All services"
|
|
}
|
|
$LicensePlanWithEnabledService=$LicensePlanWithEnabledService + $Licenseitem +"[" +$serviceExceptDisabled +"]"
|
|
$FriendlyNameOfLicensePlanWithService=$FriendlyNameOfLicensePlanWithService+ $NamePrint + "[" + $FriendlyNameOfServiceExceptDisabled +"]"
|
|
#Increment SKUid count
|
|
$count++
|
|
}
|
|
$Output=@{'Displayname'=$_.Displayname;'UserPrincipalName'=$upn;'LicensePlanWithEnabledService'=$LicensePlanWithEnabledService;
|
|
'FriendlyNameOfLicensePlanAndEnabledService'=$FriendlyNameOfLicensePlanWithService}
|
|
$Outputs= New-Object PSObject -Property $output
|
|
$Outputs | Select-Object Displayname,userprincipalname,LicensePlanWithEnabledService,FriendlyNameOfLicensePlanAndEnabledService | Export-Csv -path $ExportSimpleCSV -NoTypeInformation -Append
|
|
}
|
|
|
|
|
|
Function main()
|
|
{
|
|
#Clean up session
|
|
Get-PSSession | Remove-PSSession
|
|
#Connect AzureAD from PowerShell
|
|
Connect-MsolService
|
|
#Set output file
|
|
$ExportCSV=".\DetailedO365UserLicenseReport_$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv"
|
|
$ExportSimpleCSV=".\SimpleO365UserLicenseReport_$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv"
|
|
#FriendlyName list for license plan and service
|
|
$FriendlyNameHash=Get-Content -Raw -Path .\LicenseFriendlyName.txt -ErrorAction Stop | ConvertFrom-StringData
|
|
$ServiceArray=Get-Content -Path .\ServiceFriendlyName.txt -ErrorAction Stop
|
|
#Hash table declaration
|
|
$Result=""
|
|
$Results=@()
|
|
$output=""
|
|
$outputs=@()
|
|
#Get licensed user
|
|
$LicensedUserCount=0
|
|
|
|
#Check for input file/Get users from input file
|
|
if([string]$UserNamesFile -ne "")
|
|
{
|
|
#We have an input file, read it into memory
|
|
$UserNames=@()
|
|
$UserNames=Import-Csv -Header "DisplayName" $UserNamesFile
|
|
$userNames
|
|
foreach($item in $UserNames)
|
|
{
|
|
Get-MsolUser -UserPrincipalName $item.displayname | where{$_.islicensed -eq "true"} | Foreach{
|
|
Get_UsersLicenseInfo
|
|
$LicensedUserCount++}
|
|
}
|
|
}
|
|
|
|
#Get all licensed users
|
|
else
|
|
{
|
|
Get-MsolUser -All | where{$_.islicensed -eq "true"} | Foreach{
|
|
Get_UsersLicenseInfo
|
|
$LicensedUserCount++}
|
|
}
|
|
|
|
|
|
#Open output file after execution
|
|
Write-Host Detailed report available in: $ExportCSV
|
|
Write-host Simple report available in: $ExportSimpleCSV
|
|
$Prompt = New-Object -ComObject wscript.shell
|
|
$UserInput = $Prompt.popup("Do you want to open output files?",`
|
|
0,"Open Files",4)
|
|
If ($UserInput -eq 6)
|
|
{
|
|
Invoke-Item "$ExportCSV"
|
|
Invoke-Item "$ExportSimpleCSV"
|
|
}
|
|
}
|
|
. main |