Apply a list of exclusions to specific attack surface reduction (ASR) rules
Verified with Windows 11 25H2 — updated on July 10, 2026
Supported on: At least Windows Server 2016, Windows 10 Version 1709
Path in the GPO console
Computer Configuration\Administrative Templates\Windows Components\Microsoft Defender Antivirus\Microsoft Defender Exploit Guard\Attack Surface Reduction Description
This policy allows an administrator to specify a list of exclusions for specific ASR rules. Each entry is a name-value pair. The key indicates the rule GUID, and the value is a set of full paths separated by the > character, indicating the exclusions for that particular ASR rule. NOTE: The GUID is a KEY, not a value. Example: KEY: "{75668C1F-73B5-4CF0-BB93-3ECF5DB7C484}" VALUE: "C:\Notepad.exe>c:\regedit.exe>C:\SomeFolder\test.exe"
Registry
Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR Value name: ExploitGuard_ASR_ASROnlyPerRuleExclusions
Export Builder
BETAConfigure the state, scope and options, then generate .reg, PowerShell, Intune and SCCM outputs — or add the setting to a multi-setting collection.
These exports write the registry — this is not a managed GPO. ⓘ
.reg file
Windows Registry Editor Version 5.00
; Exported from gporais.com
; Policy: Apply a list of exclusions to specific attack surface reduction (ASR) rules
; State: Enabled
; Supported on: At least Windows Server 2016, Windows 10 Version 1709
[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR]
"ExploitGuard_ASR_ASROnlyPerRuleExclusions"=dword:00000001
[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR\ASROnlyPerRuleExclusions]
; List values: enter one value per line in the builder UI. More formats (PowerShell, Intune, SCCM)
PowerShell
# Exported from gporais.com
# Policy: Apply a list of exclusions to specific attack surface reduction (ASR) rules
# State: Enabled
# Supported on: At least Windows Server 2016, Windows 10 Version 1709
$path = 'HKLM:\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'ExploitGuard_ASR_ASROnlyPerRuleExclusions' -Value 1 -Type DWord
$path = 'HKLM:\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR\ASROnlyPerRuleExclusions'
New-Item -Path $path -Force | Out-Null
# List values: enter one value per line in the builder UI. Intune XML
No direct Policy CSP / OMA-URI mapping for this policy. Use the Intune Remediation tab, or ingest the ADMX in Intune. Intune Remediation
# === Detection script ===
# Exported from gporais.com
# Policy: Apply a list of exclusions to specific attack surface reduction (ASR) rules
# State: Enabled
# Supported on: At least Windows Server 2016, Windows 10 Version 1709
function Test-RegistryValue {
param(
[Parameter(Mandatory = $true)][string]$Path,
[Parameter(Mandatory = $true)][string]$Name,
[object]$Expected,
[ValidateSet('String', 'DWord', 'MultiString')][string]$Kind = 'String',
[switch]$Absent
)
try {
$item = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction Stop
} catch {
return $Absent.IsPresent
}
if ($Absent.IsPresent) { return $false }
$actual = $item.$Name
if ($Kind -eq 'DWord') { return ([int64]$actual) -eq ([int64]$Expected) }
if ($Kind -eq 'MultiString') {
$actualValues = @($actual)
$expectedValues = @($Expected)
if ($actualValues.Count -ne $expectedValues.Count) { return $false }
for ($i = 0; $i -lt $expectedValues.Count; $i++) {
if ([string]$actualValues[$i] -ne [string]$expectedValues[$i]) { return $false }
}
return $true
}
return [string]$actual -eq [string]$Expected
}
# HKLM:\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR\ASROnlyPerRuleExclusions: List values: enter one value per line in the builder UI.
$checks = @(
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR' -Name 'ExploitGuard_ASR_ASROnlyPerRuleExclusions' -Expected 1 -Kind DWord)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: Apply a list of exclusions to specific attack surface reduction (ASR) rules
# State: Enabled
# Supported on: At least Windows Server 2016, Windows 10 Version 1709
$path = 'HKLM:\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'ExploitGuard_ASR_ASROnlyPerRuleExclusions' -Value 1 -Type DWord
$path = 'HKLM:\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR\ASROnlyPerRuleExclusions'
New-Item -Path $path -Force | Out-Null
# List values: enter one value per line in the builder UI. SCCM scripts
# Exported from gporais.com
# Policy: Apply a list of exclusions to specific attack surface reduction (ASR) rules
# State: Enabled
# Supported on: At least Windows Server 2016, Windows 10 Version 1709
# SCCM Configuration Item guidance:
# Create a Configuration Item of type "Setting: Script".
# Discovery script: use the Detection script below.
# Remediation script: use the Remediation script below.
# Compliance rule: the Discovery script output equals 'Compliant'.
# === Detection script ===
# Exported from gporais.com
# Policy: Apply a list of exclusions to specific attack surface reduction (ASR) rules
# State: Enabled
# Supported on: At least Windows Server 2016, Windows 10 Version 1709
function Test-RegistryValue {
param(
[Parameter(Mandatory = $true)][string]$Path,
[Parameter(Mandatory = $true)][string]$Name,
[object]$Expected,
[ValidateSet('String', 'DWord', 'MultiString')][string]$Kind = 'String',
[switch]$Absent
)
try {
$item = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction Stop
} catch {
return $Absent.IsPresent
}
if ($Absent.IsPresent) { return $false }
$actual = $item.$Name
if ($Kind -eq 'DWord') { return ([int64]$actual) -eq ([int64]$Expected) }
if ($Kind -eq 'MultiString') {
$actualValues = @($actual)
$expectedValues = @($Expected)
if ($actualValues.Count -ne $expectedValues.Count) { return $false }
for ($i = 0; $i -lt $expectedValues.Count; $i++) {
if ([string]$actualValues[$i] -ne [string]$expectedValues[$i]) { return $false }
}
return $true
}
return [string]$actual -eq [string]$Expected
}
# HKLM:\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR\ASROnlyPerRuleExclusions: List values: enter one value per line in the builder UI.
$checks = @(
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR' -Name 'ExploitGuard_ASR_ASROnlyPerRuleExclusions' -Expected 1 -Kind DWord)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: Apply a list of exclusions to specific attack surface reduction (ASR) rules
# State: Enabled
# Supported on: At least Windows Server 2016, Windows 10 Version 1709
$path = 'HKLM:\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'ExploitGuard_ASR_ASROnlyPerRuleExclusions' -Value 1 -Type DWord
$path = 'HKLM:\Software\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR\ASROnlyPerRuleExclusions'
New-Item -Path $path -Force | Out-Null
# List values: enter one value per line in the builder UI. Building a multi-setting collection? Add this setting and generate combined .reg / PowerShell / GPO scripts.