To check Secure Score in Microsoft Defender, open the Secure Score page in the Defender portal, or read the latest score with Microsoft Graph and compare CurrentScore with MaxScore. A change can take 24 to 48 hours to show, and the score measures how many recommended controls are in use, not how likely a breach is.
| Method | Best fit |
|---|---|
| PowerShell | The latest score, how it compares, and a CSV of the actions with points still to gain. |
| Admin centre | A look at the score, its history and each action's steps, in Microsoft's own wording. |
| Altivane | Recommended for recurring reviews, with the score and the actions that raise it in a workbook. |
Before you start
Use an account in a Microsoft Entra role that can read Secure Score: Security Reader and Global Reader are read only. The PowerShell example requests SecurityEvents., which your organisation may need an administrator to consent to.
Microsoft keeps 1 score record a day, 90 days by default, and the examples read the latest. It lists every recommendation whatever your licences, so some actions may need a licence you do not hold. The examples read and export; they change nothing.
Option 1
Check Secure Score with PowerShell
Install the modules once, then connect, read the latest score and export the actions with points still to gain. The score holds what each action gives now; the control profile holds its title and the most it can give.
# Install once, if the modules are not already installed.
Install-Module Microsoft.Graph.Authentication, Microsoft.Graph.Security -Scope CurrentUser$ErrorActionPreference = 'Stop'
Connect-MgGraph -Scopes 'SecurityEvents.Read.All' -NoWelcome
try {
$score = Get-MgSecuritySecureScore -Top 1
if (-not $score) {
Write-Output 'Microsoft has not worked out a Secure Score for this tenant yet.'
} else {
$percent = 0
if ($score.MaxScore -gt 0) {
$percent = [math]::Round(100 * $score.CurrentScore / $score.MaxScore, 1)
}
$worked = $score.CreatedDateTime.ToUniversalTime().ToString('d MMM yyyy')
Write-Output "Secure Score: $($score.CurrentScore) of $($score.MaxScore) ($percent%)"
Write-Output "Worked out: $worked UTC"
foreach ($average in $score.AverageComparativeScores) {
Write-Output "Average, $($average.Basis): $($average.AverageScore)"
}
$profiles = @{}
foreach ($item in Get-MgSecuritySecureScoreControlProfile -All) {
$profiles[$item.Id] = $item
}
$actions = foreach ($control in $score.ControlScores) {
$info = $profiles[$control.ControlName]
if (-not $info -or $info.Deprecated) { continue }
[pscustomobject]@{
Control = $info.Title
ControlId = $control.ControlName
Category = $control.ControlCategory
Service = $info.Service
Points = $control.Score
MaxPoints = $info.MaxScore
PointsToGain = [math]::Max(0, $info.MaxScore - $control.Score)
UserImpact = $info.UserImpact
Cost = $info.ImplementationCost
}
}
$toGain = @($actions | Where-Object { $_.PointsToGain -gt 0 } |
Sort-Object @{ Expression = 'PointsToGain'; Descending = $true }, Control)
if ($toGain.Count -eq 0) {
Write-Output 'Every action has its full points.'
} else {
$csv = './secure-score-actions.csv'
$toGain | Export-Csv -Path $csv -NoTypeInformation -Encoding utf8
Write-Output "$($toGain.Count) actions have points to gain, listed in $csv."
}
}
} finally {
Disconnect-MgGraph | Out-Null
}The script prints the score and the averages Microsoft gives for comparison, then writes the actions with points still to gain, the biggest first. PointsToGain is what an action can give at most, less what it gives now. To list every action, take out Where-Object { $_.. To read the score over time, raise -Top: each record is 1 day.
Option 2
Check Secure Score in the Defender portal
- Sign in to the Microsoft Defender portal for the correct tenant.
- Open Microsoft Secure Score by going to
security..microsoft. com/securescore - On the Overview tab, read the Your secure score tile: a percentage, with the points achieved out of the total possible. The comparison bar chart shows organisations like yours.
- Open the History tab for the score over time, or Metrics & trends for how it compares with similar organisations.
- Open the Recommended actions tab, which lists each action with its status. The highest ranked have the most points left with the least difficulty, user impact and complexity.
- Select an action to read its User impact and its Implementation steps, then close the flyout.
Leave the status, notes and tags alone: choosing a status such as Risk accepted, or adding a note or tag, saves it against that action in the tenant. This suits a look at 1 tenant you already have open. For the points to gain in a file you can sort and keep, use PowerShell or a report.
Option 3 ยท Recommended for recurring reviews
Check Secure Score with Altivane
- Open Altivane and choose the tenant. Secure Score is for tenants that use Defender; include Defender in the tenant's services, and if the tenant was added before that, change its access so Altivane gets Defender's permissions.
- Build the tenant's documents with the Secure Score scorecard report in full; Summary leaves out the improvement actions.
- Open the tenant's Excel workbook or Word report and read Secure Score Summary for the score, maximum, percentage, averages and points to gain.
- Read Secure Score Improvement Actions for the 20 actions with the most points to gain, and Secure Score Controls for every action.
The report needs a tenant signed in with a certificate. The workbook shows each action's service, user impact, implementation cost, status and remediation with a link. The build also writes the tenant's Word report.
Contact usCommon questions
Why does PowerShell say access is denied?
The sign-in needs consent for SecurityEvents. and an Entra role that can read Secure Score. A custom role made with Microsoft Defender Unified RBAC works in the portal but not through Microsoft Graph, which uses Entra roles.
Why has my score not moved after I fixed an action?
Microsoft says a change can take 24 to 48 hours to show. Some actions also give only part of their points: protecting 50 of 100 users with multifactor authentication earns 5 of 10. To list the accounts still missing it, see how to find users without MFA.
Can I reach 100%?
Not always, as some points need a licence you may not hold. In the portal, select Include beside the score to add the Current license score or Achievable score, which show what your licences allow.
Microsoft references
Technical references checked on 5 October 2026. The example scripts have been reviewed and syntax checked; they have not been run against a live tenant.