Public mode

No tenant, Graph, or device access. Every item links to its source. What this means

Some sources or documents need attention: 253/255 feeds/APIs · 0/410 docs · checked 18:24 UTC Customize Public modeDiscuss ChangeIntel on Discord

Windows 11 Group Policy settings

3,621 settings · 25H2 · 1.0 · 29 Sep 2025

1 settingCSV
Back to the list

Windows Components › Internet Explorer

Turn on the auto-complete feature for user names and passwords on forms

UserNative Intune settingRestrictFormSuggestPW

Supported on At least Internet Explorer 5.0

What it does

This AutoComplete feature can remember and suggest User names and passwords on Forms. If you enable this setting, the user cannot change "User name and passwords on forms" or "prompt me to save passwords". The Auto Complete feature for User names and passwords on Forms will be turned on. You have to decide whether to select "prompt me to save passwords". If you disable this setting the user cannot change "User name and passwords on forms" or "prompt me to save passwords". The Auto Complete feature for User names and passwords on Forms is turned off. The user also cannot opt to be prompted to save passwords. If you do not configure this setting, the user has the freedom of turning on Auto complete for User name and passwords on forms and the option of prompting to save passwords. To display this option, the users open the Internet Options dialog box, click the Contents Tab and click the Settings button.

What it writes

Hive
HKEY_CURRENT_USER
Registry key
Software\Policies\Microsoft\Internet Explorer\Main
Value name
FormSuggest Passwords
When enabled
"yes"; Software\Policies\Microsoft\Internet Explorer\Control Panel\FormSuggest Passwords = DWORD 1
When disabled
"no"; Software\Policies\Microsoft\Internet Explorer\Control Panel\FormSuggest Passwords = DWORD 1

In Intune

Native Intune setting: Yes — Policy CSP

  • ./User/Vendor/MSFT/Policy/Config/InternetExplorer/AllowAutoCompleteInternetExplorer on Microsoft LearnADMX-backed: Windows ships this template, so it is set with the template's own values, without an import.Windows builds listed: 10.0.16299.

From Microsoft's Policy CSP DDF files (DDF v2 Files, February 2026), read 18 Oct 2026.

Security baselines

Microsoft's Windows 11 v26H2 Security Baseline v2 sets this to Disabled, in its GPO “MSFT Internet Explorer 11 - User”.

FormSuggest Passwords
Sets FormSuggest Passwords to 1 (REG_DWORD).
Prompt me to save passwords
Set to “no”.
Policy value FormSuggest Passwords
Sets FormSuggest Passwords to “no” (REG_SZ).

Read from the registry.pol files in the baselines' GPO backups, downloaded from Microsoft's Security Compliance Toolkit. All baselines

Options

OptionTypeRegistry valueAllowed values
Prompt me to save passwords Checkbox FormSuggest PW Ask On (1) or off (0)

Configure and deploy

Choose a state and the option values; the output below is generated from the template for exactly that.

State
Options used when Enabled

Enabled · User · template defaults

Registry file (.reg)

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel]
"FormSuggest Passwords"=dword:00000001

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main]
"FormSuggest Passwords"="yes"
"FormSuggest PW Ask"="yes"


PowerShell

$ErrorActionPreference = 'Stop'

function Set-RegistryValue {
    param(
        [Parameter(Mandatory = $true)][string] $Path,
        [Parameter(Mandatory = $true)][string] $Name,
        [Parameter(Mandatory = $true)][string] $PropertyType,
        [Parameter(Mandatory = $true)][object] $Value
    )

    if (-not (Test-Path -LiteralPath $Path)) {
        New-Item -Path $Path -Force | Out-Null
    }

    New-ItemProperty -LiteralPath $Path -Name $Name -PropertyType $PropertyType -Value $Value -Force | Out-Null
}

function Remove-RegistryValue {
    param(
        [Parameter(Mandatory = $true)][string] $Path,
        [Parameter(Mandatory = $true)][string] $Name
    )

    if (Test-Path -LiteralPath $Path) {
        Remove-ItemProperty -LiteralPath $Path -Name $Name -Force -ErrorAction SilentlyContinue
    }
}

function Clear-RegistryKeyValues {
    param(
        [Parameter(Mandatory = $true)][string] $Path
    )

    if (-not (Test-Path -LiteralPath $Path)) {
        return
    }

    foreach ($propertyName in (Get-Item -LiteralPath $Path).Property) {
        Remove-ItemProperty -LiteralPath $Path -Name $propertyName -Force -ErrorAction SilentlyContinue
    }
}

# Policy: Turn on the auto-complete feature for user names and passwords on forms
# Name: RestrictFormSuggestPW
# Scope: User
# State: Enabled
# Source: inetres.admx

Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main' -Name 'FormSuggest Passwords' -PropertyType 'String' -Value 'yes'

Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel' -Name 'FormSuggest Passwords' -PropertyType 'DWord' -Value 1

Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main' -Name 'FormSuggest PW Ask' -PropertyType 'String' -Value 'yes'

These deployment candidates come from the ADMX template; they are separate from the native CSP mapping above.

  • The OMA-URI is an inferred ADMX-backed Policy CSP candidate derived from the source ADMX file name and policy name.
  • Some Microsoft policies use built-in Policy CSP pages whose area names don't match the ADMX file name, so verify the candidate against Microsoft Learn before deployment.
  • The generated payload is incomplete because one or more ADMX element values were not supplied: ChkBox_PasswordAsk

ADMX profile candidate (OMA-URI)

./User/Vendor/MSFT/Policy/Config/ADMX_inetres/RestrictFormSuggestPW
Intune remediation scripts

Detection

$ErrorActionPreference = 'Stop'
$reasons = [System.Collections.Generic.List[string]]::new()

function Test-RegistryValueExists {
    param(
        [Parameter(Mandatory = $true)][string] $Path,
        [Parameter(Mandatory = $true)][string] $Name
    )

    if (-not (Test-Path -LiteralPath $Path)) {
        return $false
    }

    return $null -ne (Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction SilentlyContinue)
}

function Test-RegistryValueEquals {
    param(
        [Parameter(Mandatory = $true)][string] $Path,
        [Parameter(Mandatory = $true)][string] $Name,
        [Parameter(Mandatory = $true)][string] $Kind,
        [Parameter(Mandatory = $true)][object] $Expected
    )

    if (-not (Test-Path -LiteralPath $Path)) {
        return $false
    }

    $valueObject = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction SilentlyContinue
    if ($null -eq $valueObject) {
        return $false
    }

    $actual = $valueObject.$Name
    switch ($Kind) {
        'String' { return [string]$actual -ceq [string]$Expected }
        'ExpandString' { return [string]$actual -ceq [string]$Expected }
        'DWord' { return [uint32]$actual -eq [uint32]$Expected }
        'QWord' { return [uint64]$actual -eq [uint64]$Expected }
        'MultiString' {
            $actualArray = @($actual)
            $expectedArray = @($Expected)
            if ($actualArray.Count -ne $expectedArray.Count) { return $false }
            for ($index = 0; $index -lt $actualArray.Count; $index++) {
                if ([string]$actualArray[$index] -cne [string]$expectedArray[$index]) { return $false }
            }
            return $true
        }
        'Binary' {
            $actualArray = [byte[]]$actual
            $expectedArray = [byte[]]$Expected
            if ($actualArray.Length -ne $expectedArray.Length) { return $false }
            for ($index = 0; $index -lt $actualArray.Length; $index++) {
                if ($actualArray[$index] -ne $expectedArray[$index]) { return $false }
            }
            return $true
        }
        default { return [string]$actual -ceq [string]$Expected }
    }
}

# Policy: Turn on the auto-complete feature for user names and passwords on forms
# Name: RestrictFormSuggestPW
# Scope: User
# State: Enabled
# Source: inetres.admx

$isMatch = Test-RegistryValueEquals -Path 'Registry::HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main' -Name 'FormSuggest Passwords' -Kind 'String' -Expected 'yes'
if (-not $isMatch) {
    $reasons.Add('Value mismatch: HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main\FormSuggest Passwords') | Out-Null
}

$isMatch = Test-RegistryValueEquals -Path 'Registry::HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel' -Name 'FormSuggest Passwords' -Kind 'DWord' -Expected 1
if (-not $isMatch) {
    $reasons.Add('Value mismatch: HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel\FormSuggest Passwords') | Out-Null
}

$isMatch = Test-RegistryValueEquals -Path 'Registry::HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main' -Name 'FormSuggest PW Ask' -Kind 'String' -Expected 'yes'
if (-not $isMatch) {
    $reasons.Add('Value mismatch: HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main\FormSuggest PW Ask') | Out-Null
}

if ($reasons.Count -eq 0) {
    Write-Output 'Compliant'
    exit 0
}

$reasons | ForEach-Object { Write-Output $_ }
exit 1

Remediation

$ErrorActionPreference = 'Stop'

function Set-RegistryValue {
    param(
        [Parameter(Mandatory = $true)][string] $Path,
        [Parameter(Mandatory = $true)][string] $Name,
        [Parameter(Mandatory = $true)][string] $PropertyType,
        [Parameter(Mandatory = $true)][object] $Value
    )

    if (-not (Test-Path -LiteralPath $Path)) {
        New-Item -Path $Path -Force | Out-Null
    }

    New-ItemProperty -LiteralPath $Path -Name $Name -PropertyType $PropertyType -Value $Value -Force | Out-Null
}

function Remove-RegistryValue {
    param(
        [Parameter(Mandatory = $true)][string] $Path,
        [Parameter(Mandatory = $true)][string] $Name
    )

    if (Test-Path -LiteralPath $Path) {
        Remove-ItemProperty -LiteralPath $Path -Name $Name -Force -ErrorAction SilentlyContinue
    }
}

function Clear-RegistryKeyValues {
    param(
        [Parameter(Mandatory = $true)][string] $Path
    )

    if (-not (Test-Path -LiteralPath $Path)) {
        return
    }

    foreach ($propertyName in (Get-Item -LiteralPath $Path).Property) {
        Remove-ItemProperty -LiteralPath $Path -Name $propertyName -Force -ErrorAction SilentlyContinue
    }
}

# Policy: Turn on the auto-complete feature for user names and passwords on forms
# Name: RestrictFormSuggestPW
# Scope: User
# State: Enabled
# Source: inetres.admx

Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main' -Name 'FormSuggest Passwords' -PropertyType 'String' -Value 'yes'

Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel' -Name 'FormSuggest Passwords' -PropertyType 'DWord' -Value 1

Set-RegistryValue -Path 'Registry::HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main' -Name 'FormSuggest PW Ask' -PropertyType 'String' -Value 'yes'

History 5 retained releases

  1. 22H2 · 1.015 Jul 2024
    • Already present in the first release ChangeIntel keeps.

4 later releases left it unchanged.

Template

Internal name
RestrictFormSuggestPW
Namespace
Microsoft.Policies.InternetExplorer
Template file
inetres.admx
Release
Windows 11 25H2 · 1.0 · file set de4e49983ebd651f…
Definition, editor controls and support

Definition

<policy class="User" displayName="$(string.RestrictFormSuggestPW)" explainText="$(string.IE_ExplainRestrictFormSuggestPW)" key="Software\Policies\Microsoft\Internet Explorer\Main" name="RestrictFormSuggestPW" presentation="$(presentation.RestrictFormSuggestPW)" valueName="FormSuggest Passwords" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
      <parentCategory ref="Microsoft.Policies.InternetExplorer:InternetExplorer" />
      <supportedOn ref="Microsoft.Policies.InternetExplorer:SUPPORTED_IE5" />
      <enabledValue>
        <string>yes</string>
      </enabledValue>
      <disabledValue>
        <string>no</string>
      </disabledValue>
      <enabledList>
        <item key="Software\Policies\Microsoft\Internet Explorer\Control Panel" valueName="FormSuggest Passwords">
          <value>
            <decimal value="1" />
          </value>
        </item>
      </enabledList>
      <disabledList>
        <item key="Software\Policies\Microsoft\Internet Explorer\Control Panel" valueName="FormSuggest Passwords">
          <value>
            <decimal value="1" />
          </value>
        </item>
      </disabledList>
      <elements>
        <boolean id="ChkBox_PasswordAsk" valueName="FormSuggest PW Ask">
          <trueValue>
            <string>yes</string>
          </trueValue>
          <falseValue>
            <string>no</string>
          </falseValue>
        </boolean>
      </elements>
    </policy>

Editor controls

<presentation id="RestrictFormSuggestPW" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
        <checkBox refId="ChkBox_PasswordAsk">Prompt me to save passwords</checkBox>
      </presentation>

Supported platforms and category

Microsoft.Policies.InternetExplorer:category:InternetExplorer
<category displayName="$(string.InternetExplorer)" explainText="$(string.IE_ExplainCat)" name="InternetExplorer" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
      <parentCategory ref="Microsoft.Policies.Windows:WindowsComponents" />
    </category>
Microsoft.Policies.InternetExplorer:definition:SUPPORTED_IE5
<definition displayName="$(string.SUPPORTED_IE5)" name="SUPPORTED_IE5" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
        <or>
          <range minVersionIndex="5" ref="Microsoft.Policies.Products:InternetExplorer" />
        </or>
      </definition>
Microsoft.Policies.Products:product:InternetExplorer
sha256:f287ee590cbba46b7a95511866303967b9370c7c7d81185659d675ca19b05d72
Microsoft.Policies.Windows:category:WindowsComponents
<category displayName="$(string.WindowsComponents)" explainText="$(string.WindowsComponents_Help)" name="WindowsComponents" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
Microsoft.Policies.InternetExplorer:category:InternetExplorer
<category displayName="$(string.InternetExplorer)" explainText="$(string.IE_ExplainCat)" name="InternetExplorer" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
      <parentCategory ref="Microsoft.Policies.Windows:WindowsComponents" />
    </category>
<strings><string id="Microsoft.Policies.InternetExplorer:IE_ExplainCat">Contains settings to configure Internet Explorer</string><string id="Microsoft.Policies.InternetExplorer:InternetExplorer">Internet Explorer</string></strings>
Microsoft.Policies.InternetExplorer:definition:SUPPORTED_IE5
<definition displayName="$(string.SUPPORTED_IE5)" name="SUPPORTED_IE5" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
        <or>
          <range minVersionIndex="5" ref="Microsoft.Policies.Products:InternetExplorer" />
        </or>
      </definition>
<strings><string id="Microsoft.Policies.InternetExplorer:SUPPORTED_IE5">At least Internet Explorer 5.0</string></strings>
Microsoft.Policies.Products:product:InternetExplorer
<product displayName="$(string.InternetExplorer)" name="InternetExplorer" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
        <majorVersion displayName="$(string.InternetExplorer30)" name="InternetExplorer30" versionIndex="3" />
        <majorVersion displayName="$(string.InternetExplorer40)" name="InternetExplorer40" versionIndex="4" />
        <majorVersion displayName="$(string.InternetExplorer50)" name="InternetExplorer50" versionIndex="5" />
        <majorVersion displayName="$(string.InternetExplorer60)" name="InternetExplorer60" versionIndex="6" />
        <majorVersion displayName="$(string.InternetExplorer70)" name="InternetExplorer70" versionIndex="7" />
        <majorVersion displayName="$(string.InternetExplorer80)" name="InternetExplorer80" versionIndex="8" />
        <majorVersion displayName="$(string.InternetExplorer90)" name="InternetExplorer90" versionIndex="9" />
        <majorVersion displayName="$(string.InternetExplorer100)" name="InternetExplorer100" versionIndex="10" />
        <majorVersion displayName="$(string.InternetExplorer110)" name="InternetExplorer110" versionIndex="11" />
      </product>
<strings><string id="Microsoft.Policies.Products:InternetExplorer">Internet Explorer</string><string id="Microsoft.Policies.Products:InternetExplorer100">Internet Explorer 10</string><string id="Microsoft.Policies.Products:InternetExplorer110">Internet Explorer 11</string><string id="Microsoft.Policies.Products:InternetExplorer30">Internet Explorer 3</string><string id="Microsoft.Policies.Products:InternetExplorer40">Internet Explorer 4</string><string id="Microsoft.Policies.Products:InternetExplorer50">Internet Explorer 5</string><string id="Microsoft.Policies.Products:InternetExplorer60">Internet Explorer 6</string><string id="Microsoft.Policies.Products:InternetExplorer70">Internet Explorer 7</string><string id="Microsoft.Policies.Products:InternetExplorer80">Internet Explorer 8</string><string id="Microsoft.Policies.Products:InternetExplorer90">Internet Explorer 9</string></strings>
Microsoft.Policies.Windows:category:WindowsComponents
<category displayName="$(string.WindowsComponents)" explainText="$(string.WindowsComponents_Help)" name="WindowsComponents" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
<strings><string id="Microsoft.Policies.Windows:WindowsComponents">Windows Components</string><string id="Microsoft.Policies.Windows:WindowsComponents_Help">Contains settings for operating system components.</string></strings>
ChangeIntel

An IT change radar: releases, security, known issues, retirements, documentation changes, and service status from public sources. Every item links to supporting evidence; dates and statuses can change after they are read.

Sources read 18 Oct 18:24 UTC · 253 of 255 readable · 252 fully read · documentation 0/410 current