M365Con 2027 – gratis online conferentie · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Automatiseren van licentie-optimalisatie en audits in Microsoft 365

By ·

Welkom terug bij de podcastblog! Als je ooit naar je maandelijkse Microsoft 365-softwarefactuur hebt zitten staren en je hebt afgevraagd waarom je betaalt voor licenties die niemand ooit heeft aangeraakt…

Automatically translated with AI from the original post. Read the English original

▶ BLOGAutomating LicenseOptimization and Audits…M365.FM
Titelbild: Automating License Optimization and Audits in Microsoft 365

Welkom terug bij de podcastblog! Als je ooit naar je maandelijkse softwarefactuur van Microsoft 365 hebt zitten staren en je je afvroeg waarom je betaalt voor licenties die al zes maanden niemand heeft gebruikt, dan sta je daar zeker niet alleen in. Licentiebeheer is een van die verborgen operationele kostenposten die stilletjes IT-budgetten leegtrekken en tegelijk onnodige compliance- en beveiligingsproblemen veroorzaken. Gelukkig hebben we krachtige automatiseringstools binnen handbereik. In deze uitgebreide gids laten we zien hoe je Microsoft 365-licenties kunt bijhouden, toewijzen en intrekken met PowerShell, zodat je kosten beheerst, onboarding stroomlijnt en over je hele tenant strikte compliance waarborgt. Ben je gefascineerd door technische automatiseringsstrategieën? Bekijk dan zeker onze gerelateerde aflevering over hoe je Run Your Full Stack Locally with .NET Aspire voor meer inzichten in ontwikkelworkflows en tooling.

Inleiding tot het automatiseren van licentie-optimalisatie en audits

Een Microsoft 365-tenant handmatig beheren is een recept voor burn-out en menselijke fouten. Naarmate organisaties groeien, medewerkers vertrekken, afdelingen veranderen en softwarebehoeften sterk schommelen, blijven beheerders licenties ophopen, betalen ze door voor voormalige contractors of blijven premium E5-licenties toegewezen aan inactieve accounts. Door automatisering in je licentie-optimalisatiestrategie op te nemen, haal je het giswerk eruit. Met PowerShell kun je tenantgegevens opvragen, gebruikspatronen analyseren en ongebruikte middelen programmatisch terugvorderen. Zo verander je een reactieve administratieve klus in een proactieve financiële waarborg.

Vereisten en omgevingsinrichting

Voordat je ook maar één regel code voor het terugvorderen van licenties schrijft, moet je je omgeving voorbereiden. Goede voorbereiding zorgt ervoor dat je scripts soepel draaien zonder op machtigingsproblemen of conflicten tussen modules te stuiten.

Ondersteunde systemen

Je kunt je Microsoft 365-beheerscripts uitvoeren op zowel Windows- als macOS-systemen. De meeste beheerders geven de voorkeur aan Windows 10 of later, terwijl Mac-gebruikers PowerShell Core kunnen gebruiken. Zorg er altijd voor dat je besturingssysteem de nieuwste modulaire pakketten ondersteunt. Als je bij het verbinden met services fouten tegenkomt in de Web Account Manager (WAM)-integratie of conflicten in assembly-afhankelijkheden, dan kun je met een tijdelijke oplossing zoals de schakeloptie DisableWAM je scripts toch laten doorlopen.

Machtigingen en rollen

Beveiliging staat voorop. Voer beheerscripts nooit uit met een standaard gebruikersaccount. Zorg dat de identiteit waarmee je het script uitvoert de juiste rollen heeft, zoals Global Administrator, User Administrator of License Administrator. Door het principe van least privilege te hanteren, zorg je ervoor dat je beheerdersreferenties alleen de machtigingen bevatten die nodig zijn om licentieaudits en -toewijzingen uit te voeren.

Checklist omgevingsinrichting

  1. Open Windows PowerShell als beheerder.
  2. Stel de PowerShell Gallery in als vertrouwde repository:
    Set-PSRepository -Name 'PSGallery' -InstallationPolicy Trusted
  3. Installeer de vereiste NuGet-provider als daarom wordt gevraagd.
  4. Configureer je uitvoeringsbeleid voor scripts:
    Set-ExecutionPolicy RemoteSigned

Essentiële Microsoft 365 PowerShell-modules installeren

Om gebruikers en licenties effectief te beheren, heb je lokaal de juiste toolsets nodig. Het Microsoft-ecosysteem is sterk naar geünificeerde SDK's overgestapt, maar een aantal fundamentele modules blijft cruciaal voor de dagelijkse beheertaken.

Moduleoverzicht

  • Microsoft.Graph: De moderne, geünificeerde module die oudere tools zoals MSOnline en AzureAD vervangt.
  • ExchangeOnlineManagement: Essentieel voor mailboxbeheer, conversies van gedeelde mailboxen en het traceren van mailstromen.
  • MicrosoftTeams: Essentieel voor het beheren van samenwerkingsworkloads en vergaderbeleid.

Installatiestappen

Je installeert de kernmodules met de moderne aanpak door de volgende opdrachten uit te voeren in een PowerShell-prompt met verhoogde rechten:

Install-Module -Name Microsoft.Graph -Scope CurrentUser -Force
Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser -Force
Install-Module -Name MicrosoftTeams -Scope CurrentUser -Force

Controleer je installaties altijd met Get-InstalledModule, zodat conflicterende versies je automatiseringsrunbooks niet verstoren.

PowerShell verbinden met je Microsoft 365-tenant

Een veilige en betrouwbare verbinding met je tenant is de volgende cruciale stap. Moderne authenticatiestandaarden vragen om robuuste aanpakken, zeker wanneer je onbeheerde of geplande scripts draait.

Authenticatieopties

Interactieve aanmeldingen zijn prima voor snelle, ad-hoc beheertaken, maar geautomatiseerde achtergrondscripts vragen om veilige alternatieven. Met certificaatgebaseerde authenticatie of beheerde identiteiten maak je veilig verbinding zonder wachtwoorden hard in je scriptbestanden in platte tekst op te nemen.

Verbinding maken met Graph en de services

Om verbinding te maken met de Microsoft Graph-backend voor gebruikers- en licentiebeheer, gebruik je:

Connect-MgGraph -Scopes "User.ReadWrite.All", "Organization.Read.All"

Voor Exchange-specifieke workloads en postvakconfiguraties start je je sessie met:

Connect-ExchangeOnline

Wanneer je script de batchbewerkingen heeft uitgevoerd, vergeet dan niet je sessie af te sluiten met Disconnect-ExchangeOnline of Disconnect-MgGraph.

Ongebruikte licenties controleren en licentie-inventarissen

Licentie-optimalisatie begint bij zicht hebben. Je kunt geen licenties terugvorderen als je niet weet wie ze gebruikt en wie ze heeft laten liggen. Met PowerShell haal je uitgebreide inventarisrapporten op met de toegewezen SKU's en de tijdstempels van de laatste aanmelding.

Abonnementen-SKU's controleren

Om het totale aantal gekochte licenties van je tenant af te zetten tegen het aantal beschikbare licenties, voer je het volgende commando uit:

Get-MgSubscribedSku | Select-Object SkuId, SkuPartNumber, @{Name="Total";Expression={$_.ConsolidatedStatus}}, @{Name="Assigned";Expression={$_.AssignedUnits}}

Inactieve gebruikers vinden

Accounts die al meer dan 90 dagen niet zijn aangemeld, zijn de snelste manier om onnodige cloudkosten drastisch terug te dringen. Je kunt gebruikerslijsten filteren om slapende accounts op te sporen:

$Threshold = (Get-Date).AddDays(-90)
Get-MgGet-MgUser -All -Property Id, DisplayName, UserPrincipalName, SignInActivity | Where-Object { $_.SignInActivity.LastSignInDateTime -lt $Threshold }

Deze gegevens exporteren naar een CSV-bestand maakt het mogelijk om het IT-management duidelijke kostenbesparingscijfers te presenteren voordat je licenties in bulk verwijdert.

Set-MgUserLicense gebruiken om licenties toe te wijzen en in te trekken

Zodra je onderbenutte licenties hebt gevonden of nieuwe medewerkers hebt die moeten worden ingewerkt, wordt de cmdlet Set-MgUserLicense je belangrijkste middel om aanpassingen door te voeren.

Licenties programmatisch toewijzen

Om een specifieke product-SKU aan een nieuwe gebruiker toe te wijzen, maak je een licentietoewijzingsobject aan dat de doel-SkuId bevat:

$Params = @{
    AddLicenses = @(
        @{
            SkuId = "your-sku-guid-here"
        }
    )
    RemoveLicenses = @()
}
Set-MgUserLicense -UserId "alex.johnson@contoso.com" -BodyParameter $Params

Ongebruikte licenties intrekken

Wanneer je licenties terugvordert van slapende accounts of van medewerkers die uit dienst zijn, keer je de bewerking om door de SKU-identifier door te geven aan de arrayparameter RemoveLicenses. Zo stopt je organisatie meteen met betalen voor ongebruikte cloudcapaciteit.

Onboarding- en offboardingprocessen van licenties automatiseren

Handmatig gebruikers aanmaken en uitschrijven kost veel tijd en brengt beveiligingsrisico's met zich mee. Door je onboarding- en offboardingprocessen te scripten, zorg je ervoor dat licenties worden toegekend zodra een medewerker begint en direct worden ingetrokken op de dag dat hij of zij vertrekt.

Een geautomatiseerd offboardingscript kan de gebruikersaccount uitschakelen, de toegewezen licenties verwijderen, de postbus omzetten naar een gedeelde resource en auditlogs exporteren naar een beveiligde opslaglocatie, allemaal in één doorlopend uitvoeringsblok. Deze mate van synchronisatie voorkomt licentieverspilling en houdt de beveiligingspositie van de organisatie op peil.

Beveiligingsbest practices en least privilege

Automatisering geeft enorme macht, en die moet daarom strak worden beheerd. Het naleven van strikte beveiligingsprincipes beschermt je tenant tegen onbedoelde misconfiguraties en kwaadwillige scriptuitvoering.

  • Least privilege-toegang: Ken geautomatiseerde serviceaccounts nooit Global Administrator-rechten toe. Beperk de machtigingen strikt tot wat het script daadwerkelijk nodig heeft.
  • Beveiliging van referenties: Sla nooit wachtwoorden in platte tekst op in scripts. Gebruik Azure Key Vault, beheerde identiteiten of certificaatauthenticatie.
  • Uitgebreide logging: Implementeer robuuste try/catch-blokken en leg de stappen van de scriptuitvoering vast in lokale of cloudlogs voor volledige traceerbaarheid.

Veelvoorkomende licentie- en verbindingsfouten oplossen

Zelfs ervaren beheerders lopen soms tegen obstakels aan bij het uitvoeren van Microsoft 365-automatiseringsscripts. Weten hoe je deze fouten afhandelt, bespaart je uren frustratie.

  1. Fouten door ontbrekende machtigingen: Controleer of het account dat het script uitvoert de vereiste Azure AD-directoryrollen heeft en of je Graph-verbinding de juiste toestemmingsbereiken heeft aangevraagd.
  2. Mislukte licentietoewijzingen: Zorg dat de doelgebruiker een ingestelde "Gebruikslocatie" heeft. Microsoft 365 weigert licentietoewijzingen als het land van de gebruiker leeg is.
  3. Modulconflicten: Als cmdlets mislukken door conflicterende moduleversies, verwijder dan oude modules (zoals MSOnline) volledig en standaardiseer je omgeving op de moderne Microsoft Graph SDK.

Conclusie

Het automatiseren van licentieoptimalisatie en -audits in Microsoft 365 overbrugt de kloof tussen efficiënt IT-beheer en slim financieel beheer. Door PowerShell te gebruiken en cmdlets zoals Set-MgUserLicense, kun je verspilde softwarekosten uitbannen, strikte beveiligingsnaleving afdwingen en de gebruikersbeheerprocessen in je hele organisatie stroomlijnen. Wil je je technische horizon nog verder verbreden naar moderne tooling en infrastructuurbeheer, bekijk dan zeker onze gerelateerde aflevering over hoe je Run Your Full Stack Locally with .NET Aspire. Blijf proactief, houd je scripts veilig en maak van je Microsoft 365-tenant een goed geoliede, kostenefficiënte motor!

Entities in this article

PowerShell Microsoft 365 Least privilege Automation .NET Aspire Global Administrator Compliance Burnout Microsoft Graph NuGet

Related articles

RSS