Direkt zugewiesene Pläne (/Lizenzen) auslesen

Ich empfehle und implementiere bei ALL meinen Kunden IMMER Group Based Licensing. Wie das Leben aber so spielt, sind manche Kundenumgebungen historisch (manche aber auch hysterisch) gewachsen. Und dann kommt noch manch ein Spaß dank Microsoft hinzu, welche Dinge wie Teams Exploratory oder Flow (Verzeihung: PowerAutomate) Trial Lizenzen bereitstellt und den Usern diese Pläne bei Benutzung direkt zuordnet, ob es dem Admin gefällt oder nicht.

Glücklicherweise gibt es hier mittlerweile Mittel und Wege das für seinen Tenant abzuschalten:
https://docs.microsoft.com/en-us/microsoftteams/teams-exploratory#prevent-users-from-installing-trial-apps-and-services

Zurück zum Thema: Herausfinden welche Pläne NICHT über Group Based Licensing kommen bei welchem User sind.

Import-Module MSOnline
Connect-MsolService

$AllUsers = Get-MsolUser -All
$DirectAssignments = @()

Foreach($User in $AllUsers){
    $UserObjectID = $User.ObjectId
    $AllUserLicenses = $User.Licenses

    Foreach ($License in $AllUserLicenses){

        $Assignments = $License.GroupsAssigningLicense
        If ($License.GroupsAssigningLicense.Count -eq 0){

        }
        Else{
            Foreach($Assignment in $Assignments){
                If($Assignment -ieq $UserObjectID){
                    $DirectAssignment = "" | Select UserPrincipalName,AccountSkuId
                    $DirectAssignment.UserPrincipalName = $User.UserPrincipalName
                    $DirectAssignment.AccountSkuId = $License.AccountSkuId
                    $DirectAssignments += $DirectAssignment
                    Break
                }
            }  
        }
    }
}
$DirectAssignments | Out-GridView

Da zunächst ALLE User eingelesen werden und anschl. jeder User verarbeitet wird, kann das natürlich je nach Größe der Umgebung mehr oder weniger lange dauern. Das Ergebnis ist unspektakulär, aber sicherlich hilfreich. Ein wichtiger Hinweis: Jeder zugewiesene Plan wird einzeln aufgelistet. D.h. dass ein User der mehrere Pläne zugeordnet hat, mehrfach auftauchen wird. Das macht natürlich absolut Sinn, denn man möchte ja ggf. einen bestimmten Plan „weg“ haben, weshalb man diese Granularität braucht.

Und in diesem Post zeige ich euch dann, wie man mit einem Skript massenweise eben jene Lizenzen entfernt:
Manuell zugewiesene Pläne (/Lizenzen) für alle User entfernen