admpipes
Goto Top

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
connect-MsolService
und
Connect-AzureAd
aus dem Script heraus funktioniert.

1. Ansatz:
$sessions = Get-MsolUserAllSessions -UserPrinzipalName $userName
schlägt fehl, weil das cmdlet nicht (mehr) bekannt ist

2. Ansatz:
$sessions = Get-AzureAdUser -Object-ID $userUPN | Get-AzureAdUserSignInHistory 
schlägt fehl, weil das cmdlet Get-AzureADUserSignInHistory nicht (mehr) bekannt ist

3. Ansatz:
$sessions = Get-AzureAdUserSessions -UserId $userName -All $true | Where-Object {$_.Status -eq "Active"}  
schlägt fehl, weil das cmdlet Get-AzureADUserSessions nicht (mehr) bekannt ist

4. Ansatz:
$activities = Get-AzureADUserSignInActivity -Filter "userPrincipalName -eq $userName and status -eq 'sucess" | Where-Object {$_.SignInState -match "Interactive"}  
schlägt fehl, weil das cmdlet Get-AzureADUserSignInActivity nicht (mehr) bekannt ist

5. Ansatz:
$logs = Get-AzureADSignInLogs -Filter "userPrincipalName -eq $userName and Sucess -eq true and creationDateTime -ge $(getDate).AddDays(-1)" | Where-Object {$_.Status -eq "SignedIn"}  
schlägt fehl, weil das cmdlet Get-AzureADSignInLogs nicht (mehr) bekannt ist

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
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 face-smile

Vielen Dank für Euere Unterstützung

Gruß Pipes

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

mbehrens
Lösung mbehrens 15.05.2023 um 22:58:05 Uhr
Goto Top
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.

Wie wäre folgender Ansatz:
Get-AzureAdUser  -SearchString <username> | Revoke-AzureADUserAllRefreshToken
Cloudrakete
Lösung Cloudrakete 15.05.2023 um 23:32:20 Uhr
Goto Top
Servus,

siehe https://learn.microsoft.com/en-us/azure/active-directory/enterprise-user ...

Ist dort eigentlich recht gut beschrieben face-smile
AdmPipes
AdmPipes 16.05.2023 aktualisiert um 00:19:26 Uhr
Goto Top
Zitat von @mbehrens:

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.

Wie wäre folgender Ansatz:
Get-AzureAdUser  -SearchString <username> | Revoke-AzureADUserAllRefreshToken

Nun ja .... ich glaube, ich habe mich zuviel daran aufgehängt, mir vorher die aktiven Sessions anzeigen zu lassen....
Wenn ich Deinen Tip so anschaue, hinterfrage ich gerade wirklich meine Überlegung .... muss ich mir die Sessions wirklich vorher anzeigen lassen, bevor ich sie trenne? Eigentlich nicht .... im Admincenter klicke ich ja auch einfach aus "von allen Sessions trennen" wenn ich weiß der Mitarbeiter ist raus. Ohne mir vorher aufzulisten, wo er gerade aktiv ist.
Danke für´s Denkeweise in die richtige Richtung rücken face-wink - manchmal verhaspelt man sich in seinem Tun ...


Zitat von @Cloudrakete:

Servus,

siehe https://learn.microsoft.com/en-us/azure/active-directory/enterprise-user ...

Ist dort eigentlich recht gut beschrieben face-smile

Vielen Dank für den Link - der wird mir weiterhelfen

Danke Euch beiden für die Unterstützung!
Ich werde den Artikel als gelöst markieren, wenn ich beides durchprobiert habe - im Laufe dieser Woche

Gruß
Pipes
AdmPipes
AdmPipes 22.05.2023 um 09:16:08 Uhr
Goto Top
Sorry das späte "gelöst Markieren"

Danke Euch beiden nochmal für die Unterstützung @mbehrens und @Cloudrakete
Ich hab` den Teil damit umgesetzt:

Get-AzureAdUser  -SearchString <username> | Revoke-AzureADUserAllRefreshToken

Gruß