# Import the Microsoft Graph module Import-Module Microsoft.Graph # Connect to Microsoft Graph Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All" # Get all users $users = Get-MgUser -All -Property Id, UserPrincipalName, DisplayName, AccountEnabled $totalUsers = $users.Count $processCount = 0 # Initialize an array to store user information $userInfo = @() Write-Progress -Activity "Getting User Details" -Status "Starting" -PercentComplete 0 foreach ($user in $users) { $processCount++ $percentComplete = (($processCount / $totalUsers) * 100) Write-Progress -Activity "Getting User Details" -Status "Processing $processCount/$totalUsers - $($user.UserPrincipalName)" -PercentComplete $percentComplete # Get MFA methods for the user $mfaMethods = Get-MgUserAuthenticationMethod -UserId $user.Id # Check if any MFA method is registered $mfaRegistered = $mfaMethods.Count -gt 0 # Get user licenses $licenses = Get-MgUserLicenseDetail -UserId $user.Id # Create a custom object for each user $userObject = [PSCustomObject]@{ UserPrincipalName = $user.UserPrincipalName DisplayName = $user.DisplayName AccountEnabled = $user.AccountEnabled MFARegistered = $mfaRegistered MFAMethods = ($mfaMethods.AdditionalProperties.'@odata.type' -join ', ').Replace('#microsoft.graph.', '') Licenses = ($licenses.SkuPartNumber -join ', ') } # Add the user object to the array $userInfo += $userObject } # Export the results to a CSV file $userInfo | Export-Csv -Path "EntraIDUsersMFAReport.csv" -NoTypeInformation # Disconnect from Microsoft Graph Disconnect-MgGraph Write-Host "Report generated: EntraIDUsersMFAReport.csv"