Office 365 – Exchange : obtenir le « Last Logon Time » des utilisateurs
Sommaire
I. Présentation
Obtenir la date de dernière connexion de vos utilisateurs sur leur boite e-mail Office 365 est un excellent moyen de voir l'activité de vos utilisateurs sur Exchange Online. C'est aussi un bon moyen d'identifier des utilisateurs inactifs, qui seront peut être à supprimer de votre tenant. L'occasion également de récupérer quelques licences et donc de faire quelques économies... Bien sûr, l'objectif n'est pas de tracker les utilisateurs non plus... Restons correct.
Pour obtenir cette information, on utilisera le cmdlet Get-MailboxStatistics car il contient la propriété "LastLogonTime".
II. Obtenir la dernière connexion d'un utilisateur unique
Pour savoir à quand remonte la dernière connexion d'un utilisateur spécifique, on utilisera la commande suivante :
Get-MailboxStatistics -Identity <UPN-de-l-utilisateur> | Select-Object DisplayName,LastLogonTime
Ce qui nous donnera une information précise :
Maintenant, voyons comment faire un export complet pour tous les utilisateurs.
III. Obtenir la date de dernière connexion de tous les utilisateurs
On va utiliser le cmdlet "Get-Mailbox" afin de récupérer la liste de toutes les boites aux lettres. On va ensuite piper cette commande avec "Get-MailboxStatistics" pour obtenir les infos de dernière connexion sur chaque boite aux lettres.
Ce qui nous donne :
Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Select-Object DisplayName,LastLogonTime
En fonction de la quantité de compte sur votre tenant, le résultat peut prendre un certain temps avant de s'afficher.
Note : Il est à noter que le cmdlet Get-MailboxStatistics peut aussi être utilisé pour connaître le nombre d'e-mails contenu dans chaque mailbox de votre tenant.
IV. Exporter la liste des utilisateurs qui ne se sont jamais connectés
Maintenant, si l'on veut mettre tout cela en forme, on peut rédiger un petit script sympathique qui va nous retourner la liste des utilisateurs qui ne se sont pas encore connecté à Office 365. Il est à noter que la première étape consiste à récupérer la liste de toutes les mailbox du tenant, en fonction du nombre de comptes l'exécution de cette commande peut être longue.
On va créer un tableau d'objets nommé "$UsersNeverLogon" et qui pourra contenir différentes propriétés. Dans cet exemple, je stocke seulement une donnée : le nom d'affichage du compte (DisplayName).
La propriété "LastLogonTime" indique à quand remonte la dernière connexion d'un utilisateur, donc si cette valeur est vide c'est que l'utilisateur ne s'est pas encore connecté.
Au total, cela nous donne le code suivant :
$UsersNeverLogon = @() $MailboxLastLogonTime = Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Select-Object DisplayName,LastLogonTime Foreach($Mailbox in $MailboxLastLogonTime){ if($Mailbox.LastLogonTime -eq $null){ Write-Output "$($Mailbox.DisplayName) ne s'est jamais connecté !" $UsersNeverLogon += New-Object PSObject -property @{ Name = $Mailbox.DisplayName } } } $UsersNeverLogon | Export-Csv -Path "C:\Exports\O365_UsersNeverLogon.csv" -Delimiter ";" -NoTypeInformation
La dernière ligne de ce bout de code exporter le contenu de notre tableau dans un fichier CSV nommé "0365_UsersNeverLogon.csv".
Maintenant libre à vous d'utiliser ce code tel qu'il est présenté ici ou de l'améliorer ! 🙂
Bonjour,
après avoir check dans mon entreprise, le paramètre LastLogonTime est erroné (il ne remonte pas la bonne informations) voir article : https://www.petri.com/get-mailboxstatistics-cmdlet-wrong
Merci pour le script, cela m’a beaucoup aidé…
Ce lien, explique aussi les différents commandes Last* existantes, et la cmde LastUserActionTime semble la mieux adapté concernant l’action réel fait par l’utilisateur ( sans les taches de fond) —> https://o365reports.com/2019/06/18/office-365-users-last-logon-time-incorrect/
Merci encore pour l’article ^^
Tout d’abord merci à monsieur Brunel pour cette article qui m’a été très utile !
Pour ceux que ça intéresse voici une variante du script finale qui permettra d’exporter sous format csv la liste des utilisateurs ne s’étant pas connecté depuis une certaines date (2020 dans mon exemple) :
$UsersNotLoggedInSince2020 = @()
# Get the current date and set the cutoff date to January 1, 2020
$cutoffDate = Get-Date -Year 2020 -Month 1 -Day 1
$MailboxLastLogonTime = Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Select-Object DisplayName, LastLogonTime
foreach($Mailbox in $MailboxLastLogonTime) {
if($Mailbox.LastLogonTime -eq $null -or $Mailbox.LastLogonTime -lt $cutoffDate) {
Write-Output « $($Mailbox.DisplayName) ne s’est jamais connecté depuis 2020 ! »
$UsersNotLoggedInSince2020 += New-Object PSObject -property @{
Name = $Mailbox.DisplayName
}
}
}
$UsersNotLoggedInSince2020 | Export-Csv -Path « C:\Exports\O365_UsersNotLoggedInSince2020.csv » -Delimiter « ; » -NoTypeInformation
Vous pouvez l’adapter à votre sauce en modifiant les champs `cutoffdate` en fonction de votre besoin.