Mozilla › Firefox › Extensions
Prevent extensions from being disabled or removed
Supported on Firefox 60 or later, Firefox 60 ESR or later
What it does
If this policy is enabled, you can specify a list of extension IDs that the user will be unable to uninstall or disable. If this policy is disabled or not configured, no extensions are locked
What it writes
- Hive
- HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER
- Registry key
Software\Policies\Mozilla\Firefox\Extensions\Locked
Options
| Option | Type | Registry value | Allowed values |
|---|---|---|---|
| Extensions | List of values | |
Any |
Configure and deploy
Choose a state and the option values; the output below is generated from the template for exactly that.
Enabled · Computer · template defaults
Registry file (.reg)
Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\Software\Policies\Mozilla\Firefox\Extensions\Locked]
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: Prevent extensions from being disabled or removed
# Name: Extensions_Locked
# Scope: Machine
# State: Enabled
# Source: firefox.admx
Clear-RegistryKeyValues -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Policies\Mozilla\Firefox\Extensions\Locked'
- 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: Extensions
ADMX profile candidate (OMA-URI)
./Device/Vendor/MSFT/Policy/Config/ADMX_firefox/Extensions_LockedIntune 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: Prevent extensions from being disabled or removed
# Name: Extensions_Locked
# Scope: Machine
# State: Enabled
# Source: firefox.admx
$keyPath = 'Registry::HKEY_LOCAL_MACHINE\Software\Policies\Mozilla\Firefox\Extensions\Locked'
if (Test-Path -LiteralPath $keyPath) {
$propertyNames = (Get-Item -LiteralPath $keyPath).Property
if ($propertyNames.Count -gt 0) {
$reasons.Add('Key should be empty: HKEY_LOCAL_MACHINE\Software\Policies\Mozilla\Firefox\Extensions\Locked') | 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: Prevent extensions from being disabled or removed
# Name: Extensions_Locked
# Scope: Machine
# State: Enabled
# Source: firefox.admx
Clear-RegistryKeyValues -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Policies\Mozilla\Firefox\Extensions\Locked'
History 45 retained releases
- 4.418 Oct 2022
- Translations changed; choose a language above to compare its wording.
- 2.1019 Apr 2021
- Translations changed; choose a language above to compare its wording.
- 2.823 Feb 2021
- Translations changed; choose a language above to compare its wording.
- 1.113 Dec 2019
- Translations changed; choose a language above to compare its wording.
- 1.1023 Oct 2019
- Translations changed; choose a language above to compare its wording.
- 1.8.229 Jul 2019
- Translations changed; choose a language above to compare its wording.
- 1.73 Jun 2019
- Translations changed; choose a language above to compare its wording.
- 1.414 Dec 2018
- Description
…
If this policy is disabled or not configured, no extensions are locked
[removed: Starting with Firefox 62, this policy will only work from Computer Configuration.]Whole description, marked
If this policy is enabled, you can specify a list of extension IDs that the user will be unable to uninstall or disable. If this policy is disabled or not configured, no extensions are locked
[removed: Starting with Firefox 62, this policy will only work from Computer Configuration.] - Supported on Firefox 60 [added: or later, Firefox 60 ]ESR or later
- Supported on SUPPORTED_FF60
[removed: ESR]; resolved; Blank;
- Description
…
If this policy is disabled or not configured, no extensions are locked
- 1.317 Oct 2018
- Translations changed; choose a language above to compare its wording.
- 1.211 Sep 2018
- Description
… disable.
If this policy is disabled or not configured, no extensions are
[removed: locked.][added: locked Starting with Firefox 62, this policy will only work from Computer Configuration.]Whole description, marked
If this policy is enabled, you can specify a list of extension IDs that the user will be unable to uninstall or disable. If this policy is disabled or not configured, no extensions are
[removed: locked.][added: locked Starting with Firefox 62, this policy will only work from Computer Configuration.] - Supported on
[removed: Microsoft Windows XP SP2][added: Firefox 60 ESR] or later - Supported on SUPPORTED_
[removed: WINXPSP2][added: FF60ESR]; resolved; Blank;
- Description
… disable.
If this policy is disabled or not configured, no extensions are
- 1.09 May 2018
- Already present in the first release ChangeIntel keeps.
34 later releases left it unchanged.
Template
- Internal name
Extensions_Locked- Namespace
Mozilla.Policies.Firefox- Template file
firefox.admx- Release
- Mozilla Firefox 4.7 · file set
e3837384c3b8245f…
Definition, editor controls and support
Definition
<policy class="Both" displayName="$(string.Extensions_Locked)" explainText="$(string.Extensions_Locked_Explain)" key="Software\Policies\Mozilla\Firefox\Extensions\Locked" name="Extensions_Locked" presentation="$(presentation.Extensions)" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Mozilla.Policies.Firefox:Extensions" />
<supportedOn ref="Mozilla.Policies.Firefox:SUPPORTED_FF60" />
<elements>
<list id="Extensions" key="Software\Policies\Mozilla\Firefox\Extensions\Locked" valuePrefix="" />
</elements>
</policy>Editor controls
<presentation id="Extensions" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<listBox refId="Extensions" />
</presentation>Supported platforms and category
Mozilla.Policies.Firefox:category:Extensions
<category displayName="$(string.Extensions_group)" name="Extensions" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Mozilla.Policies.Firefox:firefox" />
</category>
Mozilla.Policies.Firefox:category:firefox
<category displayName="$(string.firefox)" name="firefox" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Mozilla.Policies:Cat_Mozilla" />
</category>
Mozilla.Policies.Firefox:definition:SUPPORTED_FF60
<definition displayName="$(string.SUPPORTED_FF60)" name="SUPPORTED_FF60" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
Mozilla.Policies:category:Cat_Mozilla
<category displayName="$(string.mozilla)" name="Cat_Mozilla" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
Mozilla.Policies.Firefox:category:Extensions
<category displayName="$(string.Extensions_group)" name="Extensions" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Mozilla.Policies.Firefox:firefox" />
</category>
<strings><string id="Mozilla.Policies.Firefox:Extensions_group">Extensions</string></strings>
Mozilla.Policies.Firefox:category:firefox
<category displayName="$(string.firefox)" name="firefox" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<parentCategory ref="Mozilla.Policies:Cat_Mozilla" />
</category>
<strings><string id="Mozilla.Policies.Firefox:firefox">Firefox</string></strings>
Mozilla.Policies.Firefox:definition:SUPPORTED_FF60
<definition displayName="$(string.SUPPORTED_FF60)" name="SUPPORTED_FF60" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
<strings><string id="Mozilla.Policies.Firefox:SUPPORTED_FF60">Firefox 60 or later, Firefox 60 ESR or later</string></strings>
Mozilla.Policies:category:Cat_Mozilla
<category displayName="$(string.mozilla)" name="Cat_Mozilla" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions" />
<strings><string id="Mozilla.Policies:mozilla">Mozilla</string></strings>