Entra / Microsoft 365 · Users & guests
Get user sign-in data (Graph SDK)
Fetch user sign-in data from Microsoft Graph using Graph SDK cmdlets.
Connect & set up
Run these once per session. All scopes are read-only unless the script makes changes.
Connect-MgGraph -Scopes User.Read.All -NoWelcome
Run it
The main script. Copy it, or download the .ps1 and run it from your console.
Connect-MgGraph -Scopes User.Read.All -NoWelcomeClear-Host$CSVFile = "c:\Temp\ReportUserSignin.csv"# Get User sign in dataWrite-Host "Accessing the Graph to get user sign-in data..."[array]$Users = Get-MgUser -All `-Property Id, Mail, displayName, UserPrincipalName, SignInActivity, CreatedDateTime, usertype$Report = [System.Collections.Generic.List[Object]]::new()ForEach ($User in $Users) {[string]$LastSignInOutput = $Null; $DaysSinceSignIn = $NullIf ($Null -ne $User.SignInActivity) {$LastUserSignInDate = $User.SignInActivity.lastSignInDateTimeIf ($Null -ne $LastUserSignInDate) {$LastSignInOutput = Get-Date($LastUserSignInDate) -format g$DaysSinceSignIn = (New-TimeSpan $LastUserSignInDate).Days}} Else { #No sign in data for this user account$LastSignInOutput = "Never or > 180 days"$DaysSinceSignIn = "N/A"}$ReportLine = [PSCustomObject] @{UPN = $User.UserPrincipalNameDisplayName = $User.DisplayNameEmail = $User.MailObjectId = $User.IdCreated = Get-Date($User.CreatedDateTime) -format gLastSignIn = $LastSignInOutputDaysSinceSignIn = $DaysSinceSignInUserType = $User.UserType }$Report.Add($ReportLine)} # End ForEachWrite-Host ("All done. {0} accounts processed - output available in {1}" -f $users.count, $CSVFile)$Report | Sort-Object UserType, DisplayName | Out-GridView$Report | Export-CSV -NoTypeInformation $CSVFile
Attribution
Author
Office365itpros