Powershell: Active Microsoft 365 Sitzungen eines Users trennen
Hallo Community,
ich habe folgendes Problem:
Ich erarbeite gerade ein Powershell-Script, mit dem wir das Offboarding von Mitarbeitern in unserer Firma effizienter durchführen können.
Unter Anderem ist in dem Script vorgesehen, den ausscheidenden Mitarbeiter von allen evtl. aktive Microsoft 365 Sitzungen abzumelden. Wie wenn ich in der Admin-Umgebung von 365 auf einen User klicke und da auf "von allen laufenden Sitzungen abmelden" klicke.
Nun habe ich in meinem Script schon verschieden Ansätze durch und fall immer auf die Nase - und langsam gehen mir die Ideen aus. Ich habe auch benötigte Module (AzureAD, Msonline) installiert und importiert. Ich kann auch in Powershell ise die cmdlets besagter Module sehen. Und auch das Verbinden mit und aus dem Script heraus funktioniert.
1. Ansatz:
schlägt fehl, weil das cmdlet nicht (mehr) bekannt ist
2. Ansatz:
schlägt fehl, weil das cmdlet Get-AzureADUserSignInHistory nicht (mehr) bekannt ist
3. Ansatz:
schlägt fehl, weil das cmdlet Get-AzureADUserSessions nicht (mehr) bekannt ist
4. Ansatz:
schlägt fehl, weil das cmdlet Get-AzureADUserSignInActivity nicht (mehr) bekannt ist
5. Ansatz:
schlägt fehl, weil das cmdlet Get-AzureADSignInLogs nicht (mehr) bekannt ist
6.Ansatz:
schlägt Fehl weil ich immer HTTP Code 403 zurückbekomme
Ich habe in unserem Azure Microsoft Graph API als App registriert, und die Berechtigungen von Graph API stehen auf User.Read und User.Read.All.
User.Read.All musste ich im Azure nochmal explizit administrativ einwilligen, was auch geschehen ist.
Im Azure habe ich "globaler Administrator" als Rolle inne.
Trotzdem wird die Abfrage mit 403 zurück gewiesen.
Wenn ich mich bei Microsoft Graph Explorer anmelde und die Query eingebe, kommt ebenfalls eine 403-er mit dem Hinweis ich habe nicht ausreichende Berechtigung oder ich müsste der Berechtigung der App noch einwilligen.
Den einzigen Query was ich erfolgreich mit 200 beantwortet bekomme ist im Graph Explorer "https://graph.microsoft.com/v1.0/me"
Wenn ich die url so im Script als $graphUrl angebe,bekomme ich als Rückantwort 400 Ungültige Anforderung
Leute ich weiß hier nicht, wo ich noch ansetzen soll/könnte, damit ich aktive Sessions eines User anzeigen kann.
Hat noch irgendeiner eine Idee? Oder kann mir jemand sagen woran es liegen kann, dass ich am Ansatz mit der Graph API scheitere?
Boah viel Text - Danke für´s geduldige lesen, wenn Du bis hierher gekommen bist
Vielen Dank für Euere Unterstützung
Gruß Pipes
ich habe folgendes Problem:
Ich erarbeite gerade ein Powershell-Script, mit dem wir das Offboarding von Mitarbeitern in unserer Firma effizienter durchführen können.
Unter Anderem ist in dem Script vorgesehen, den ausscheidenden Mitarbeiter von allen evtl. aktive Microsoft 365 Sitzungen abzumelden. Wie wenn ich in der Admin-Umgebung von 365 auf einen User klicke und da auf "von allen laufenden Sitzungen abmelden" klicke.
Nun habe ich in meinem Script schon verschieden Ansätze durch und fall immer auf die Nase - und langsam gehen mir die Ideen aus. Ich habe auch benötigte Module (AzureAD, Msonline) installiert und importiert. Ich kann auch in Powershell ise die cmdlets besagter Module sehen. Und auch das Verbinden mit
connect-MsolService
Connect-AzureAd
1. Ansatz:
$sessions = Get-MsolUserAllSessions -UserPrinzipalName $userName
2. Ansatz:
$sessions = Get-AzureAdUser -Object-ID $userUPN | Get-AzureAdUserSignInHistory
3. Ansatz:
$sessions = Get-AzureAdUserSessions -UserId $userName -All $true | Where-Object {$_.Status -eq "Active"}
4. Ansatz:
$activities = Get-AzureADUserSignInActivity -Filter "userPrincipalName -eq $userName and status -eq 'sucess" | Where-Object {$_.SignInState -match "Interactive"}
5. Ansatz:
$logs = Get-AzureADSignInLogs -Filter "userPrincipalName -eq $userName and Sucess -eq true and creationDateTime -ge $(getDate).AddDays(-1)" | Where-Object {$_.Status -eq "SignedIn"}
6.Ansatz:
$userUPN = "eineMail@domäne.de"
#Zugriffstoken abrufen
$clientID = "irgendeine - Client - Id - im - Azure erzeugt"
$clientSecret = "BuchstabenZahlenSalat aus dem Azure"
$TendantID = "Unsere Tendant-ID"
$tokenUrl = "https://login.microsoftonline.com/$tendantID/oauth2/v2.0/token"
$tokenBody = @{ grant_type = "client-credentials" client_id = $clientID client_secret = $clientSecret scope = "https://graph.microsoft.com/.default" }
$tokenResponse = Invoke-RestMethod -Method Post -Uri $tokenUrl -Body $tokenBody
$accessToken = $tokenResponse.access_token #den Access-Token bekomme ich auch zurück was mich annehmen lässt, dass dieser Teil noch funktioniert
$graphUrl = "https://graph.microsoft.com/v1.0/users/$benutzerUPN/sessions"
$graphHeaders = @{"Authorization" = "Bearer $accessToken"}
$sessionResponse = Invoke-RestMethod -Method Get -Uri $graphUri -Headers $graphHeaders
# ab dem Befehl bekomme ich vom Server einen HTTP-Code 403 zurück
Ich habe in unserem Azure Microsoft Graph API als App registriert, und die Berechtigungen von Graph API stehen auf User.Read und User.Read.All.
User.Read.All musste ich im Azure nochmal explizit administrativ einwilligen, was auch geschehen ist.
Im Azure habe ich "globaler Administrator" als Rolle inne.
Trotzdem wird die Abfrage mit 403 zurück gewiesen.
Wenn ich mich bei Microsoft Graph Explorer anmelde und die Query eingebe, kommt ebenfalls eine 403-er mit dem Hinweis ich habe nicht ausreichende Berechtigung oder ich müsste der Berechtigung der App noch einwilligen.
Den einzigen Query was ich erfolgreich mit 200 beantwortet bekomme ist im Graph Explorer "https://graph.microsoft.com/v1.0/me"
Wenn ich die url so im Script als $graphUrl angebe,bekomme ich als Rückantwort 400 Ungültige Anforderung
Leute ich weiß hier nicht, wo ich noch ansetzen soll/könnte, damit ich aktive Sessions eines User anzeigen kann.
Hat noch irgendeiner eine Idee? Oder kann mir jemand sagen woran es liegen kann, dass ich am Ansatz mit der Graph API scheitere?
Boah viel Text - Danke für´s geduldige lesen, wenn Du bis hierher gekommen bist
Vielen Dank für Euere Unterstützung
Gruß Pipes
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7166703512
Url: https://administrator.de/forum/powershell-active-microsoft-365-sitzungen-eines-users-trennen-7166703512.html
Ausgedruckt am: 18.04.2025 um 12:04 Uhr
4 Kommentare
Neuester Kommentar
Zitat von @AdmPipes:
Ich erarbeite gerade ein Powershell-Script, mit dem wir das Offboarding von Mitarbeitern in unserer Firma effizienter durchführen können.
Unter Anderem ist in dem Script vorgesehen, den ausscheidenden Mitarbeiter von allen evtl. aktive Microsoft 365 Sitzungen abzumelden. Wie wenn ich in der Admin-Umgebung von 365 auf einen User klicke und da auf "von allen laufenden Sitzungen abmelden" klicke.
Unter Anderem ist in dem Script vorgesehen, den ausscheidenden Mitarbeiter von allen evtl. aktive Microsoft 365 Sitzungen abzumelden. Wie wenn ich in der Admin-Umgebung von 365 auf einen User klicke und da auf "von allen laufenden Sitzungen abmelden" klicke.
Wie wäre folgender Ansatz:
Get-AzureAdUser -SearchString <username> | Revoke-AzureADUserAllRefreshToken
Servus,
siehe https://learn.microsoft.com/en-us/azure/active-directory/enterprise-user ...
Ist dort eigentlich recht gut beschrieben
siehe https://learn.microsoft.com/en-us/azure/active-directory/enterprise-user ...
Ist dort eigentlich recht gut beschrieben