Configure App Install Control
Verified with Windows 11 25H2 — updated on July 30, 2026
Supported on: At least Windows Server 2016, Windows 10 Version 1809
Path in the GPO console
Computer Configuration\Administrative Templates\Windows Components\Windows Defender SmartScreen\Explorer Description
App Install Control is a feature of Windows Defender SmartScreen that helps protect PCs by allowing users to install apps only from the Store. SmartScreen must be enabled for this feature to work properly. If you enable this setting, you must choose from the following behaviors: - Turn off app recommendations - Show me app recommendations - Warn me before installing apps from outside the Store - Allow apps from Store only If you disable or don't configure this setting, users will be able to install apps from anywhere, including files downloaded from the Internet.
Registry
Software\Policies\Microsoft\Windows Defender\SmartScreen Value name: ConfigureAppInstallControlEnabled
Enabled: ConfigureAppInstallControlEnabled = 1
Disabled: ConfigureAppInstallControlEnabled = 0
MDM / Intune (CSP)
./Device/Vendor/MSFT/Policy/Config/SmartScreen/EnableAppInstallControl Microsoft Learn documentation Mapping data: Microsoft Learn (CC BY 4.0)
CSP values
-
0 (Default)- Turns off Application Installation Control, allowing users to download and install files from anywhere on the web. -
1- Turns on Application Installation Control, allowing users to only install apps from the Store. -
2- Turns on Application Installation Control, letting users know that there's a comparable app in the Store. -
3- Turns on Application Installation Control, warning users before installing apps from outside the Store.
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: Configure App Install Control
; State: Enabled
; Supported on: At least Windows Server 2016, Windows 10 Version 1809
[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows Defender\SmartScreen]
"ConfigureAppInstallControlEnabled"=dword:00000001
"ConfigureAppInstallControl"="Anywhere" More formats (PowerShell, Intune, SCCM)
PowerShell
# Exported from gporais.com
# Policy: Configure App Install Control
# State: Enabled
# Supported on: At least Windows Server 2016, Windows 10 Version 1809
$path = 'HKLM:\Software\Policies\Microsoft\Windows Defender\SmartScreen'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'ConfigureAppInstallControlEnabled' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name 'ConfigureAppInstallControl' -Value 'Anywhere' -Type String Intune XML
OMA-URI: ./Device/Vendor/MSFT/Policy/Config/SmartScreen/EnableAppInstallControl
Data type: String
Value:
<enabled/>
<data id="ConfigureAppInstallControl_Dropdown" value="Anywhere"/> Intune Remediation
# === Detection script ===
# Exported from gporais.com
# Policy: Configure App Install Control
# State: Enabled
# Supported on: At least Windows Server 2016, Windows 10 Version 1809
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
}
$checks = @(
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows Defender\SmartScreen' -Name 'ConfigureAppInstallControlEnabled' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows Defender\SmartScreen' -Name 'ConfigureAppInstallControl' -Expected 'Anywhere' -Kind String)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: Configure App Install Control
# State: Enabled
# Supported on: At least Windows Server 2016, Windows 10 Version 1809
$path = 'HKLM:\Software\Policies\Microsoft\Windows Defender\SmartScreen'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'ConfigureAppInstallControlEnabled' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name 'ConfigureAppInstallControl' -Value 'Anywhere' -Type String SCCM scripts
# Exported from gporais.com
# Policy: Configure App Install Control
# State: Enabled
# Supported on: At least Windows Server 2016, Windows 10 Version 1809
# 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: Configure App Install Control
# State: Enabled
# Supported on: At least Windows Server 2016, Windows 10 Version 1809
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
}
$checks = @(
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows Defender\SmartScreen' -Name 'ConfigureAppInstallControlEnabled' -Expected 1 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\Software\Policies\Microsoft\Windows Defender\SmartScreen' -Name 'ConfigureAppInstallControl' -Expected 'Anywhere' -Kind String)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: Configure App Install Control
# State: Enabled
# Supported on: At least Windows Server 2016, Windows 10 Version 1809
$path = 'HKLM:\Software\Policies\Microsoft\Windows Defender\SmartScreen'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'ConfigureAppInstallControlEnabled' -Value 1 -Type DWord
Set-ItemProperty -Path $path -Name 'ConfigureAppInstallControl' -Value 'Anywhere' -Type String Building a multi-setting collection? Add this setting and generate combined .reg / PowerShell / GPO scripts.