Automatiseren van licentie-optimalisatie en audits in Microsoft 365
By Mirko Peters ·
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
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
- Open Windows PowerShell als beheerder.
- Stel de PowerShell Gallery in als vertrouwde repository:
Set-PSRepository -Name 'PSGallery' -InstallationPolicy Trusted - Installeer de vereiste NuGet-provider als daarom wordt gevraagd.
- 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 -ForceControleer 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-ExchangeOnlineWanneer 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 $ParamsOngebruikte 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.
- 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.
- Mislukte licentietoewijzingen: Zorg dat de doelgebruiker een ingestelde "Gebruikslocatie" heeft. Microsoft 365 weigert licentietoewijzingen als het land van de gebruiker leeg is.
- 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!