{"id":909259,"date":"2026-10-23T14:45:49","date_gmt":"2026-10-23T14:45:49","guid":{"rendered":"https:\/\/www.ninjaone.com\/blog\/geplante-graph-api-pruefungen-abgelaufene-lizenzen\/"},"modified":"2026-10-23T14:45:50","modified_gmt":"2026-10-23T14:45:50","slug":"geplante-graph-api-pruefungen-abgelaufene-lizenzen","status":"publish","type":"post","link":"https:\/\/www.ninjaone.com\/de\/blog\/geplante-graph-api-pruefungen-abgelaufene-lizenzen\/","title":{"rendered":"So f\u00fchren Sie geplante Graph-API-Pr\u00fcfungen f\u00fcr abgelaufene Lizenzen und inaktive Benutzer:innen durch"},"content":{"rendered":"<div class=\"in-context-cta\"><h2 style=\"margin-top: 0px;\">Schl\u00fcsselpunkte<\/h2>\n<ul>\n<li>Risiken erkennen: Fragen Sie die Microsoft Graph API per PowerShell ab, um abgelaufene Microsoft-365-Lizenzen und Azure-AD-Konten zu identifizieren, die seit 90 oder mehr Tagen inaktiv sind.<\/li>\n<li>Passende Berechtigungen einrichten: Legen Sie vor den Pr\u00fcfungen eine Rolle als Globaler Administrator oder Berichtsleser fest und richten Sie das Microsoft Graph PowerShell SDK sowie die Berechtigungen User.Read.All, LicenseAssignment.ReadWrite.All und AuditLog.Read.All ein.<\/li>\n<li>Ergebnisse exportieren und archivieren: Speichern Sie die Pr\u00fcfergebnisse in CSV-Berichten mit Zeitstempel, um einen Audit-Trail f\u00fcr Compliance und Entscheidungen zur Lizenzr\u00fcckgewinnung zu erhalten.<\/li>\n<li>Zeitplan automatisieren: F\u00fchren Sie das Skript wiederkehrend \u00fcber die Windows-Aufgabenplanung auf einem einzelnen Rechner aus oder verteilen Sie es per RMM-Tool auf mehrere Endpunkte und Mandanten.<\/li>\n<li>Ausnahmen definieren und kalibrieren: Nehmen Sie Dienstkonten und Break-Glass-Konten \u00fcber eine Whitelist aus und legen Sie Inaktivit\u00e4tsschwellen fest, die zur Risikobereitschaft Ihres Unternehmens passen.<\/li>\n<\/ul>\n<\/div>\n<p>Ungenutzte Microsoft-365-Lizenzen belasten das Budget unbemerkt, und inaktive <a href=\"https:\/\/www.ninjaone.com\/de\/blog\/azure-ad-vs-active-directory\/\">Azure AD<\/a>-Konten sind ein echtes Sicherheitsrisiko. Automatisieren Sie Pr\u00fcfungen \u00fcber die Microsoft Graph API, um abgelaufene Lizenzen und verwaiste Konten zu erkennen, bevor daraus unn\u00f6tige Kosten oder Sicherheitsl\u00fccken entstehen.<\/p>\n<p>In dieser Anleitung zeigen wir Ihnen, wie Sie wichtige Pr\u00fcfungen per PowerShell einplanen, Schwachstellen schlie\u00dfen und das Ganze \u00fcber mehrere Kund:innen hinweg skalieren.<\/p>\n<p><em>Einen schnellen \u00dcberblick erhalten Sie in unserem Video-Leitfaden <a href=\"https:\/\/www.ninjaone.com\/videos\/msp-growth\/how-to-run-scheduled-graph-api-checks-for-expired-licenses-and-inactive-users\/\">So f\u00fchren Sie geplante Graph-API-Pr\u00fcfungen f\u00fcr abgelaufene Lizenzen und inaktive Benutzer:innen durch<\/a>.<\/em><\/p>\n<h2>Graph-API-Pr\u00fcfungen per PowerShell einplanen: Schritt f\u00fcr Schritt<\/h2>\n<p>Automatisieren Sie Graph-API-Pr\u00fcfungen, um ungenutzte Lizenzen zur\u00fcckzugewinnen, verwaiste Konten abzusichern, Compliance-Anforderungen zu erf\u00fcllen und die Mandantenverwaltung zu verschlanken, alles in einem Durchgang.<\/p>\n<p><strong>Anwendungsfall: <\/strong>Setzen Sie diese Methode bei monatlichen Kostenpr\u00fcfungen, Sicherheitsaudits oder vor Lizenzverl\u00e4ngerungen ein. Sie eignet sich besonders f\u00fcr MSPs, die abgelaufene Office-365-Lizenzen zur\u00fcckgewinnen oder nach dem Offboarding von Besch\u00e4ftigten das Hardening verbessern m\u00f6chten. So erkennen Sie inaktive Benutzer:innen, bevor sie zur Schwachstelle in Ihrem System werden.<\/p>\n<p><strong>Voraussetzungen:<\/strong> Bevor wir mit dem Vorgehen beginnen, stellen Sie Folgendes sicher:<\/p>\n<ul>\n<li><strong>Administrative Berechtigungen: <\/strong>Ihr Konto ben\u00f6tigt in Azure AD die Rolle Globaler Administrator oder Berichtsleser.<\/li>\n<li><strong>Tools:<\/strong> Microsoft Graph PowerShell SDK (Modul Microsoft.Graph) und PowerShell 7+.<\/li>\n<li><strong>Azure-Einrichtung:<\/strong> Stellen Sie sicher, dass Ihre Azure-AD-App f\u00fcr die Automatisierung \u00fcber die Berechtigungen User.Read.All, LicenseAssignment.ReadWrite.All und AuditLog.Read.All verf\u00fcgt.<\/li>\n<li><strong>Optional, aber empfehlenswert:<\/strong> Laden Sie ein RMM-Tool wie NinjaOne herunter und installieren Sie es, um Skripte zu planen, Ausgaben zu \u00fcberwachen und \u00fcber mehrere Mandanten hinweg zu skalieren.<\/li>\n<\/ul>\n<h3>Schritt 1: Microsoft Graph SDK installieren und authentifizieren<\/h3>\n<p>Richten Sie zun\u00e4chst Ihr Toolkit ein, um Lizenz- und Benutzerpr\u00fcfungen zu automatisieren. Mit dem installierten Graph SDK fragen Sie Azure-AD-Daten ab, die Administrator:innen normalerweise nicht sichtbar machen, und verbinden Ihr Skript authentifiziert mit der Microsoft-API.<\/p>\n<p>Schritt f\u00fcr Schritt:<\/p>\n<ol>\n<li>Installieren Sie das SDK, indem Sie dieses Skript in <strong>PowerShell (Administrator) <\/strong>oder im <strong>Windows Terminal (Administrator)<\/strong> ausf\u00fchren:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>Install-Module Microsoft.Graph -Scope CurrentUser -Force<\/code><\/strong><\/p>\n<ol start=\"2\">\n<li>Authentifizieren Sie sich mit diesem Skript:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><code><span style=\"font-weight: normal !msorm;\"><strong>Connect-MgGraph -Scopes \"User.Read.All\", \"LicenseAssignment.ReadWrite.All\", \"AuditLog.Read.All<\/strong><\/span><\/code><\/p>\n<p>Sie k\u00f6nnen au\u00dferdem eine registrierte App mit einem Client Secret konfigurieren und f\u00fcr die unbeaufsichtigte Ausf\u00fchrung den Zertifikats- oder Client-Credentials-Flow nutzen.<\/p>\n<p>Nach der Authentifizierung des Graph SDK k\u00f6nnen Sie in den n\u00e4chsten Schritten inaktive Azure-AD-Benutzer:innen und abgelaufene Office-365-Lizenzen abfragen.<\/p>\n<h3>Schritt 2: Benutzer:innen mit abgelaufenen oder nicht zugewiesenen Lizenzen abfragen<\/h3>\n<p>Dieser Schritt deckt abgelaufene Lizenzen und inaktive Konten auf, die ein Sicherheitsrisiko darstellen und unn\u00f6tige Kosten verursachen.<\/p>\n<p>Schritt f\u00fcr Schritt:<\/p>\n<ol>\n<li>F\u00fchren Sie in <strong>PowerShell (Administrator)<\/strong> dieses Skript aus, um nicht zugewiesene Lizenzen auf Mandantenebene zu pr\u00fcfen:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>Get-MgSubscribedSku |<\/code><\/strong><br \/>\n<strong><code>Select-Object SkuPartNumber,<\/code><\/strong><br \/>\n<strong><code>@{Name=\"TotalLicenses\"; Expression={$_.PrepaidUnits.Enabled}},<\/code><\/strong><br \/>\n<strong><code>@{Name=\"UsedLicenses\"; Expression={$_.ConsumedUnits}},<\/code><\/strong><br \/>\n<strong><code>@{Name=\"Available\"; Expression={$_.PrepaidUnits.Enabled - $_.ConsumedUnits}} |<\/code><\/strong><br \/>\n<strong><code>Format-Table -AutoSize<\/code><\/strong><\/p>\n<ol start=\"2\">\n<li>F\u00fchren Sie dieses Skript aus, um Benutzer:innen ohne Lizenz zu finden:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>Get-MgUser -Filter \"assignedLicenses\/`$count eq 0\" `<\/code><\/strong><br \/>\n<strong><code>-ConsistencyLevel eventual `<\/code><\/strong><br \/>\n<strong><code>-CountVariable unlicensedCount `<\/code><\/strong><br \/>\n<strong><code>-All |<\/code><\/strong><br \/>\n<strong><code>Select-Object DisplayName, UserPrincipalName |<\/code><\/strong><br \/>\n<strong><code>Export-Csv -Path \"UnlicensedUsers.csv\" -NoTypeInformation<\/code><\/strong><\/p>\n<ol start=\"3\">\n<li>F\u00fchren Sie dieses Skript aus, um inaktive Benutzer:innen mit Lizenz zu finden:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>$daysInactive = 90<\/code><\/strong><br \/>\n<strong><code>$cutoffDate = (Get-Date).AddDays(-$daysInactive)# Get licensed inactive users<\/code><\/strong><br \/>\n<strong><code>Get-MgUser -All -Property \"DisplayName,UserPrincipalName,SignInActivity,AssignedLicenses\" |<\/code><\/strong><br \/>\n<strong><code>Where-Object {<\/code><\/strong><br \/>\n<strong><code>($_.SignInActivity.LastSignInDateTime -lt $cutoffDate) -and<\/code><\/strong><br \/>\n<strong><code>($_.AssignedLicenses.Count -gt 0)<\/code><\/strong><br \/>\n<strong><code>} |<\/code><\/strong><br \/>\n<strong><code>Select-Object DisplayName,<\/code><\/strong><br \/>\n<strong><code>UserPrincipalName,<\/code><\/strong><br \/>\n<strong><code>@{Name=\"LastSignIn\"; Expression={$_.SignInActivity.LastSignInDateTime}} |<\/code><\/strong><br \/>\n<strong><code>Export-Csv -Path \"InactiveLicensedUsers.csv\" -NoTypeInformation<\/code><\/strong><\/p>\n<p><strong>Wichtig:<\/strong> Beachten Sie, dass SignInActivity Azure AD Premium P1\/P2 voraussetzt. Verzichten Sie au\u00dferdem in Produktivskripten auf Beta-Endpunkte.<\/p>\n<p>Nach der Ausf\u00fchrung dieser Skripte erhalten Sie zwei CSV-Dateien: UnlicensedUsers.csv mit Benutzer:innen, denen eine Lizenz zugewiesen werden muss, und InactiveLicensedUsers.csv mit Konten, die ein Sicherheitsrisiko darstellen.<\/p>\n<h3>Schritt 3: Audit-Ergebnisse exportieren und protokollieren<\/h3>\n<p>Sobald Sie die Liste der abgelaufenen und nicht zugewiesenen Lizenzen haben, machen Sie mit automatisierter Berichterstattung handlungsrelevante Erkenntnisse daraus. Der Export erzeugt dauerhafte Audit-Trails als Compliance-Nachweis, und die Automatisierung sorgt daf\u00fcr, dass Sie Probleme erkennen, bevor sie teuer werden.<\/p>\n<p>Schritt f\u00fcr Schritt:<\/p>\n<ol>\n<li>F\u00fchren Sie in <strong>PowerShell (Administrator)<\/strong> dieses Skript aus, um in eine CSV-Datei mit Zeitstempel zu exportieren:\n<ul>\n<li>Skript, das einen Dateinamen mit Zeitstempel erzeugt:<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p style=\"padding-left: 80px;\"><strong><code>$timestamp = Get-Date -Format \"yyyyMMdd-HHmm\"<\/code><\/strong><br \/>\n<strong><code>$reportPath = \"C:\\Audits\\LicenseReport_$timestamp.csv\"<\/code><\/strong><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Inaktive Benutzer:innen mit Lizenz exportieren:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p style=\"padding-left: 80px;\"><strong><code>$inactiveUsers | Export-Csv -Path $reportPath -NoTypeInformation<\/code><\/strong><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>So entstehen CSV-Dateien, die sich \u00fcberall \u00f6ffnen lassen, und der Zeitstempel sorgt f\u00fcr versionierte Datens\u00e4tze f\u00fcr die Compliance.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ol start=\"2\">\n<li>(Optional): F\u00fchren Sie dieses Skript aus, um Berichte per E-Mail zu versenden:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>Send-MailMessage -From \"audit@yourcompany.com\" -To \"admin@client.com\" `<\/code><\/strong><br \/>\n<strong><code>-Subject \"ACTION REQUIRED: $($inactiveUsers.Count) Inactive Licensed Users\" `<\/code><\/strong><br \/>\n<strong><code>-Body \"Attached: Users with licenses but no sign-ins for 90+ days\" `<\/code><\/strong><br \/>\n<strong><code>-Attachments $reportPath -SmtpServer \"smtp.office365.com\" -Port 587 `<\/code><\/strong><br \/>\n<strong><code>-Credential (Get-Credential)<\/code><\/strong><\/p>\n<ol start=\"3\">\n<li>F\u00fchren Sie dieses Skript aus, um den Ablauf mit der Azure-AD-App vollst\u00e4ndig zu automatisieren:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>$tenantId = \"YOUR_TENANT_ID\"<\/code><\/strong><br \/>\n<strong><code>$clientId = \"YOUR_CLIENT_ID\"<\/code><\/strong><br \/>\n<strong><code>$clientSecret = \"YOUR_SECRET\" | ConvertTo-SecureString -AsPlainText -ForceConnect-MgGraph -TenantId $tenantId -ClientId $clientId -ClientSecret $clientSecret<\/code><\/strong><\/p>\n<p><strong>Tipp:<\/strong> Bewahren Sie Secrets in Azure Key Vault auf. Hinterlegen Sie sie niemals fest im Code.<\/p>\n<p>Nach der Ausf\u00fchrung dieser Skripte liegen lokal CSV-Berichte mit Zeitstempel vor, auf Wunsch zus\u00e4tzlich sofortige E-Mail-Benachrichtigungen an die Beteiligten. Mit diesen Dateien k\u00f6nnen Sie automatisierte Durchl\u00e4ufe \u00fcber die Aufgabenplanung oder RMM-Tools wie NinjaOne einrichten und so eine durchgehende \u00dcberwachung sicherstellen.<\/p>\n<h3>Schritt 4: Mit der Aufgabenplanung oder einer RMM-Richtlinie automatisieren<\/h3>\n<p>Planen Sie Ihr Skript einmal und lassen Sie es monatlich, j\u00e4hrlich oder dauerhaft laufen, f\u00fcr eine proaktive \u00dcberwachung ganz ohne Zutun. Regelm\u00e4\u00dfige Pr\u00fcfungen helfen, Probleme fr\u00fchzeitig zu erkennen. Daf\u00fcr gibt es zwei M\u00f6glichkeiten:<\/p>\n<h4>Option 1: \u00dcber die Aufgabenplanung (einzelner Rechner)<\/h4>\n<p>Schritt f\u00fcr Schritt:<\/p>\n<ol>\n<li>\u00d6ffnen Sie die <strong>Eingabeaufforderung (Administrator)<\/strong> und f\u00fchren Sie diesen Befehl aus:<\/li>\n<\/ol>\n<p style=\"padding-left: 40px;\"><strong><code>schtasks \/create \/tn \"M365LicenseAudit\" \/tr `<\/code><\/strong><br \/>\n<strong><code>\"powershell.exe -ExecutionPolicy Bypass -File C:\\Scripts\\LicenseAudit.ps1\" `<\/code><\/strong><br \/>\n<strong><code>\/sc weekly \/d MON \/st 02:00 \/ru \"NT AUTHORITY\\SYSTEM\"<\/code><\/strong><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Das funktioniert, weil die Aufgabe unter einem Systemkonto l\u00e4uft, auch wenn niemand angemeldet ist.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>Option 2: \u00dcber RMM-Tools<\/h4>\n<p>Schritt f\u00fcr Schritt:<\/p>\n<ol>\n<li>\u00d6ffnen Sie Ihr bevorzugtes RMM-Tool, zum Beispiel NinjaOne.<\/li>\n<li>Erstellen Sie das Skript (aus Option 1) und speichern Sie es in der Skriptbibliothek von NinjaOne.<\/li>\n<li>Weisen Sie das Skript der Richtliniengruppe \u201eMicrosoft 365 Clients\u201c zu.<\/li>\n<li>Konfigurieren Sie die Ausgaben:\n<ul>\n<li>Speichern Sie die CSV-Dateien unter <strong>\\\\ClientShare\\Audits<\/strong>.<\/li>\n<li>Laden Sie sie zur zentralen Ansicht in das Dashboard des RMM hoch.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Nach der Planung l\u00e4uft das Skript zum festgelegten Datum und zur festgelegten Uhrzeit, speichert die Berichte automatisiert in den vorgesehenen Ordnern und zeigt die Entwicklungen \u00fcber alle Mandanten hinweg.<\/p>\n<h2 id=\"things-to-look-out-for\">Worauf Sie achten sollten<\/h2>\n<p>In diesem Abschnitt finden Sie m\u00f6gliche Stolpersteine, die Sie beim Durcharbeiten dieser Anleitung im Blick behalten sollten.<\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Risiken<\/strong><\/td>\n<td><strong>M\u00f6gliche Folgen<\/strong><\/td>\n<td><strong>Gegenma\u00dfnahmen<\/strong><\/td>\n<\/tr>\n<tr>\n<td>1. Fehlende Daten in Berichten<\/td>\n<td>Unvollst\u00e4ndige Audits, unentdeckte Risiken<\/td>\n<td>Berechtigungen pr\u00fcfen: F\u00fchren Sie <strong><code>Get-MgContext<\/code><\/strong> aus, um Scopes wie User.Read.All zu verifizieren.<\/p>\n<p>MFA-Blockaden umgehen: Nutzen Sie die Zertifikatsauthentifizierung statt Secrets.<\/td>\n<\/tr>\n<tr>\n<td>2. Skript schl\u00e4gt unbemerkt fehl<\/td>\n<td>Tr\u00fcgerische Sicherheit, Compliance-L\u00fccken<\/td>\n<td>Protokollierung aktivieren<strong>:<\/strong> Erg\u00e4nzen Sie Ihre Skripte um <strong><code>Start-Transcript -Path C:\\Logs\\Audit.log<\/code><\/strong>.<\/p>\n<p>Ereignisanzeige im Blick behalten: Pr\u00fcfen Sie unter <strong>Anwendungs- und Dienstprotokolle &gt; PowerShell<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td>3. Benutzer:innen werden nicht markiert<\/td>\n<td>Abgelaufene Lizenzen\/inaktive Konten werden \u00fcbersehen<\/td>\n<td>Schwellenwerte validieren: Pr\u00fcfen Sie, ob <strong>$cutoffDate<\/strong> zur Richtlinie passt.<\/p>\n<p>Lizenzfelder verifizieren: Nutzen Sie <strong><code>Get-MgUser -UserId user@domain.com -Property AssignedLicenses<\/code><\/strong>.<\/td>\n<\/tr>\n<tr>\n<td>4. Fest im Code hinterlegte Secrets<\/td>\n<td>Kompromittierung des Mandanten, Diebstahl von Anmeldeinformationen<\/td>\n<td>Secrets sofort in Azure AD rotieren.<\/p>\n<p>Auf Azure Key Vault umstellen: Nutzen Sie <strong>Get-AzKeyVaultSecret<\/strong>, um Secrets sicher abzurufen.<\/td>\n<\/tr>\n<tr>\n<td>5. Abh\u00e4ngigkeit von Beta-APIs<\/td>\n<td>Skript funktioniert nach Microsoft-Updates nicht mehr<\/td>\n<td>Beta-Endpunkte ersetzen: Nutzen Sie <strong><code>Get-MgUser<\/code><\/strong> (v1.0) statt <strong>Get-MgBetaUser<\/strong>.<\/p>\n<p>Abonnieren Sie das Changelog von Microsoft Graph.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Das macht Graph-API-Audits mit PowerShell wirklich belastbar<\/h2>\n<p>Passen Sie diese Einstellungen an Ihre Umgebung an. Pr\u00e4zision verhindert Fehlalarme und h\u00e4lt die Workflows st\u00f6rungsfrei.<\/p>\n<h3>Ausnahmen in Berichten<\/h3>\n<p>Nehmen Sie Dienstkonten, gemeinsame Postf\u00e4cher und Break-Glass-Konten von Inaktivit\u00e4tsscans aus. So vermeiden Sie, dass Lizenzen f\u00fcr kritische Ressourcen versehentlich zur\u00fcckgenommen werden. Mit PowerShell-Filtern setzen Sie sie auf eine Whitelist, zum Beispiel mit diesem Skript:<\/p>\n<p><strong><code>$excludedUPNs = @(\"backup@domain.com\", \"admin@domain.com\")<\/code><\/strong><br \/>\n<strong><code>Get-MgUser | Where-Object { $_.UserPrincipalName -notin $excludedUPNs }<\/code><\/strong><\/p>\n<h3>Inaktivit\u00e4tsschwellen<\/h3>\n<p>Legen Sie die Schwellenwerte entsprechend Ihrer Risikobereitschaft fest. Ist ein Konto 90 Tage inaktiv, gilt es als geringes Risiko, 60 Tage als mittleres und 30 Tage als hohes Risiko. Je nach Risiko verschicken Sie Warn-E-Mails, entziehen die Lizenzen oder deaktivieren das Konto und gewinnen die Lizenz anschlie\u00dfend zur\u00fcck. So sind Sie gegen Probleme abgesichert.<\/p>\n<h3>H\u00e4ufigkeit der Audits<\/h3>\n<p>W\u00e4hlen Sie den Zeitpunkt Ihrer Audits bewusst, um Sicherheitsrisiken und andere Probleme zu vermeiden. F\u00fcr die meisten Unternehmen empfehlen sich monatliche Pr\u00fcfungen, passend zu den Abrechnungszyklen.<\/p>\n<p>In Branchen mit hoher Fluktuation sorgen w\u00f6chentliche Pr\u00fcfungen daf\u00fcr, dass die Berichte mit den Ver\u00e4nderungen in der Umgebung Schritt halten. Au\u00dferdem sollten Sie ein Audit sofort ansto\u00dfen, wenn Besch\u00e4ftigte das Unternehmen verlassen.<\/p>\n<h3>Zuordnung von Ma\u00dfnahmen<\/h3>\n<p>Erstellen Sie SOPs, die die n\u00e4chsten Schritte automatisiert ansto\u00dfen. Mit den folgenden Skripten gewinnen Sie Lizenzen zur\u00fcck und deaktivieren Konten:<\/p>\n<ul>\n<li>Lizenzen zur\u00fcckgewinnen:<\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\"><strong><code>Set-MgUserLicense -UserId \"user@domain.com\" -RemoveLicenses @(\"skuId\")<\/code><\/strong><\/p>\n<ul>\n<li>Konten deaktivieren:<\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\"><strong><code>Update-MgUser -UserId \"user@domain.com\" -AccountEnabled:$false<\/code><\/strong><\/p>\n<p>Archivieren Sie die Daten im Anschluss an die Ausf\u00fchrung dieser Skripte. Leiten Sie sie per Graph API an die zust\u00e4ndige F\u00fchrungskraft oder an SharePoint weiter.<\/p>\n<h2>So verschlankt NinjaOne Ihre Lizenz-Audits<\/h2>\n<p>Machen Sie aus manuellen Graph-API-Pr\u00fcfungen eine vollst\u00e4ndig automatisierte Compliance-Maschine \u00fcber alle Mandanten hinweg.<\/p>\n<ul>\n<li><strong>Zentrale Skriptverteilung:<\/strong> Verteilen Sie Ihre Graph-API-PowerShell-Skripte mit einer einzigen Aktion auf \u00fcber 100 Endpunkte und Mandanten.<\/li>\n<li><strong>Automatisierte \u00dcberwachung der Ausgaben: <\/strong>Behalten Sie CSV-Berichte und Protokolle \u00fcber alle Kund:innen hinweg im Blick. Werden Dateien nicht aktualisiert, erfolgt sofort eine Alarmierung.<\/li>\n<li><strong>Fehlermeldungen in Ihren Tools:<\/strong> Erhalten Sie Benachrichtigungen per Slack, Teams oder E-Mail, wenn Skripte fehlschlagen.<\/li>\n<li><strong>Einheitliche mandanten\u00fcbergreifende Berichte:<\/strong> F\u00fchren Sie Daten zu abgelaufenen Office-365-Lizenzen und inaktiven Benutzer:innen in einem Management-Dashboard zusammen.<\/li>\n<li><strong>Automatisch ausgel\u00f6ste Behebung:<\/strong> Erstellen Sie anhand vordefinierter SOPs automatisiert Tickets in Ihrem PSA-Tool, sobald abgelaufene Lizenzen erkannt werden.<\/li>\n<\/ul>\n<h2>Kosten und Sicherheit mit Graph-API-Lizenzpr\u00fcfungen im Griff behalten<\/h2>\n<p>Wer Lizenz- und Benutzer-Audits automatisiert, macht aus reaktiver Kontrolle proaktive Steuerung. Indem Sie ungenutzte Lizenzen zur\u00fcckgewinnen und verwaiste Konten deaktivieren, verhindern Sie unn\u00f6tige Kosten und schlie\u00dfen Angriffswege. Nutzen Sie das beschriebene Vorgehen, um aus ungenutzten Lizenzen Budgeteinsparungen und aus verwaisten Konten Compliance zu machen.<\/p>\n<div class=\"quick-start-guide\"><h2><svg width=\"45\" height=\"45\" viewBox=\"0 0 45 45\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<path d=\"M41.4822 0H3.51778C1.57496 0 0 1.57496 0 3.51778V41.4822C0 43.425 1.57496 45 3.51778 45H41.4822C43.425 45 45 43.425 45 41.4822V3.51778C45 1.57496 43.425 0 41.4822 0Z\" fill=\"#053856\"\/>\n<path d=\"M30.4399 13.9904C28.9161 12.4475 26.9127 11.6737 24.4346 11.6737C23.0721 11.6737 21.8188 11.911 20.6794 12.3858C19.5401 12.8605 18.5859 13.5346 17.8168 14.4129V11.2654L12.2766 13.867V32.562H18.0779V22.4739C18.0779 20.6224 18.5099 19.2267 19.3787 18.2867C20.2474 17.3515 21.4105 16.8815 22.8727 16.8815C24.1877 16.8815 25.1894 17.285 25.8825 18.0968C26.5756 18.9086 26.9222 20.1334 26.9222 21.7808V32.562H32.7234V21.2728C32.7234 18.2393 31.9591 15.5285 30.4399 13.9856V13.9904Z\" fill=\"#04FF88\"\/>\n<\/svg>Quick-Start-Guide<\/h2><p>NinjaOne unterst\u00fctzt Sie dabei, geplante Graph-API-Pr\u00fcfungen f\u00fcr abgelaufene Lizenzen und inaktive Benutzer:innen durchzuf\u00fchren. Die <a href=\"https:\/\/www.ninjaone.com\/de\/plattform\/\">NinjaOne-Plattform<\/a> bietet Tools und Hilfestellung f\u00fcr:<\/p>\n<ul>\n<li><b>Audits abgelaufener Lizenzen<\/b>: Identifizieren Sie mit der Graph API Lizenzen, deren Ablaufdatum \u00fcberschritten ist<\/li>\n<li><b>Pr\u00fcfung inaktiver Benutzer:innen<\/b>: Erkennen Sie Benutzer:innen, die sich innerhalb eines definierten Zeitraums nicht angemeldet oder keine Dienste genutzt haben<\/li>\n<li><b>Automatisierung dieser Pr\u00fcfungen<\/b>: Richten Sie geplante Aufgaben ein, die diese Audits regelm\u00e4\u00dfig ausf\u00fchren<\/li>\n<\/ul>\n<\/div>\n<p><strong>Verwandte Themen<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/www.ninjaone.com\/de\/blog\/best-practices-api-sicherheit\/\">8 Best Practices zur Absicherung von APIs<\/a><\/li>\n<li><a href=\"https:\/\/www.ninjaone.com\/de\/script-hub\/benachrichtigungen-ueber-inaktive-benutzerkonten-unter-linux\/\">So benachrichtigen Sie \u00fcber inaktive Benutzerkonten unter Linux: ein umfassender Skript-Leitfaden<\/a><\/li>\n<li><a href=\"https:\/\/www.ninjaone.com\/de\/script-hub\/automatisieren-der-erkennung-von-inaktiven-benutzerkonten-mit-powershell\/\">Inaktive Benutzerkonten mit PowerShell automatisiert erkennen<\/a><\/li>\n<li><a href=\"https:\/\/www.ninjaone.com\/de\/script-hub\/ungenutzte-lokale-konten-auf-der-windows-powershell\/\">Ungenutzte lokale Konten auf Windows-Systemen erkennen und verwalten<\/a><\/li>\n<li><a href=\"https:\/\/www.ninjaone.com\/de\/script-hub\/deaktivieren-von-benutzerkonten-unter-linux\/\">Umfassender Leitfaden zum Deaktivieren von Benutzerkonten unter Linux f\u00fcr IT-Fachleute<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Ungenutzte Microsoft-365-Lizenzen belasten das Budget unbemerkt, und inaktive Azure AD-Konten sind ein echtes Sicherheitsrisiko. Automatisieren Sie Pr\u00fcfungen \u00fcber die Microsoft Graph API, um abgelaufene Lizenzen und verwaiste Konten zu erkennen, bevor daraus unn\u00f6tige Kosten oder Sicherheitsl\u00fccken entstehen. In dieser Anleitung zeigen wir Ihnen, wie Sie wichtige Pr\u00fcfungen per PowerShell einplanen, Schwachstellen schlie\u00dfen und das Ganze [&hellip;]<\/p>\n","protected":false},"author":35,"featured_media":539759,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[4356],"tags":[],"class_list":["post-909259","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it-betrieb"],"acf":[],"modified_by":null,"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/posts\/909259","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/comments?post=909259"}],"version-history":[{"count":1,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/posts\/909259\/revisions"}],"predecessor-version":[{"id":909260,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/posts\/909259\/revisions\/909260"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/media\/539759"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/media?parent=909259"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/categories?post=909259"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ninjaone.com\/de\/wp-json\/wp\/v2\/tags?post=909259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}