To check which Defender for Cloud plans are on, read the pricing setting of every plan in every subscription. Azure reports each plan as Standard, which is on, or Free, which is off, with a sub-plan where the plan has one. The setting belongs to each subscription, so a tenant with several subscriptions needs 1 read for each. A plan that is Free is not a fault in itself.
| Method | Best fit |
|---|---|
| PowerShell | A repeatable, sortable CSV of every plan in every subscription the account can read. |
| Admin centre | A quick look across subscriptions in Azure Resource Graph Explorer, or the plans of 1 subscription, without installing tools. |
| Altivane | Recommended for recurring reviews, with each plan's tier and sub-plan in a workbook. |
Before you start
Use an Azure account with read access to the subscriptions you want to check. The built-in Reader role is enough, assigned at the subscription or a parent scope. No Defender plan or other licence is needed to read the settings. The PowerShell example uses the Az.Accounts and Az.Security modules, reads Azure and exports a CSV without changing anything. Its finally block disconnects the account, so you may need to sign in again. Disabled subscriptions, and ones the account cannot read, are left out.
Azure calls the setting the pricing tier: Standard is on and Free is off. The examples read the setting of each subscription. Some plans, such as Defender for Storage, can also be on for a single resource, which is not shown.
Option 1
Check Defender for Cloud plans with PowerShell
Install the modules once and connect to Azure. The script reads the plans of each enabled subscription and writes 1 row for each plan.
Install-Module -Name Az.Accounts, Az.Security -Repository PSGallery -Scope CurrentUser$ErrorActionPreference = 'Stop'
Connect-AzAccount -ErrorAction Stop
try {
$subscriptions = @(Get-AzSubscription | Where-Object State -eq 'Enabled')
if ($subscriptions.Count -eq 0) {
Write-Output 'No enabled subscriptions are available to this account.'
return
}
$rows = @(
foreach ($subscription in $subscriptions) {
try {
Set-AzContext -Subscription $subscription.Id -Scope Process | Out-Null
$plans = @(Get-AzSecurityPricing)
} catch {
Write-Warning "Could not read $($subscription.Name): $($_.Exception.Message)"
continue
}
foreach ($plan in $plans) {
$tier = if ($plan.PricingTier -eq 'Standard') { 'On' }
elseif ($plan.PricingTier -eq 'Free') { 'Off' }
else { 'Not set' }
[pscustomobject]@{
Subscription = $subscription.Name
Plan = $plan.Name
Tier = $tier
SubPlan = $plan.SubPlan
SubscriptionId = $subscription.Id
}
}
}
)
if ($rows.Count -eq 0) {
Write-Output 'No Defender for Cloud plans were read.'
} else {
$rows |
Sort-Object Subscription, Plan |
Export-Csv -Path './defender-plans.csv' -NoTypeInformation -Encoding utf8
$off = @($rows | Where-Object Tier -eq 'Off')
Write-Output "$($rows.Count) plan settings saved to defender-plans.csv."
Write-Output "$($off.Count) plan settings are off."
}
} finally {
Disconnect-AzAccount | Out-Null
}The export has the subscription name, the plan's name as Azure writes it, its tier as On or Off, its sub-plan and the subscription ID. A subscription that cannot be read gives a warning and the script carries on. An empty result writes a message, not an empty CSV.
To narrow the search, keep only the subscriptions you want in $subscriptions. To list only what is off, add | Where-Object Tier -eq 'Off' before Export-Csv.
Option 2
Review Defender for Cloud plans in the Azure portal
- Sign in to the Azure portal with read access to the subscriptions.
- Search for resource graph > choose Resource Graph Explorer.
- Paste this query in Query 1 and choose Run query:
SecurityResources | where type == 'microsoft.security/pricings' | extend plan = name, tier = tostring(properties.pricingTier) | extend status = iff(tier =~ 'Standard', 'On', iff(tier =~ 'Free', 'Off', 'Not set')) | project subscriptionId, plan, status, subPlan = tostring(properties.subPlan) | order by subscriptionId asc, plan asc - Review the plans in Results. Each row is 1 plan in 1 subscription.
- To see 1 subscription's plans, search for Microsoft Defender for Cloud > choose Environment settings > select the subscription. The plans page shows each plan as on or off. Leave the toggles alone, as each one changes the subscription.
- To compare subscriptions, go to Microsoft Defender for Cloud > Workbooks > Coverage, which shows each plan's status for each subscription.
These suit an occasional look. Use PowerShell when you need a CSV to keep.
Option 3 ยท Recommended for recurring reviews
Check Defender for Cloud plans with Altivane
- Open Altivane and choose the tenant.
- Run the Defender for Cloud Plans report.
- Open the Excel workbook and read the Defender for Cloud plans table, where each plan in each subscription has its tier, sub-plan and plan ID.
- Read the Tier column for the plans that are off.
Altivane reads every subscription the connected account can read in 1 run and writes an Excel workbook to keep. Plans are named in plain words, with Azure's own name for each in the Plan ID column. Tier shows On for a plan that is Standard in Azure and Off for one that is Free. If the account can read no subscription, the table is empty and says how to give Altivane its Azure role.
Contact usCommon questions
Does Off mean a subscription has no protection?
No. Off means the paid plan is not on for that subscription. The free tier still gives the foundational features, including recommendations, the asset inventory and secure score.
Why does a plan show a sub-plan, and why do subscriptions differ?
A sub-plan names the variant of a plan that is on, such as P1 or P2 for the Virtual Machines plan. Each subscription keeps its own settings, so 1 can have a plan on while another has it off.
What else should I review in these subscriptions?
For vaults, see how to check key vaults for soft delete and purge protection in Azure, which needs the same read access.
Microsoft references
Technical references checked on 8 October 2026. The example scripts have been reviewed and syntax checked; they have not been run against a live tenant.