Deploy Firefox policies to all installs

This commit is contained in:
2026-05-24 10:12:00 +02:00
parent cbe534db31
commit 31ce93d6f5
2 changed files with 55 additions and 19 deletions
+43 -17
View File
@@ -51,6 +51,16 @@ function Install-FirefoxEsr {
}
function Get-FirefoxExecutablePath {
$FirefoxPaths = Get-FirefoxExecutablePaths
if ($FirefoxPaths.Count -gt 0) {
return $FirefoxPaths[0]
}
return $null
}
function Get-FirefoxExecutablePaths {
$CandidatePaths = @()
$AppPath = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe" -ErrorAction SilentlyContinue
@@ -75,16 +85,20 @@ function Get-FirefoxExecutablePath {
$CandidatePaths += @(
"$env:ProgramFiles\Mozilla Firefox\firefox.exe",
"$env:ProgramFiles\Mozilla Firefox ESR\firefox.exe",
"${env:ProgramFiles(x86)}\Mozilla Firefox\firefox.exe"
"${env:ProgramFiles(x86)}\Mozilla Firefox ESR\firefox.exe"
)
$FirefoxPaths = @()
foreach ($Path in ($CandidatePaths | Where-Object { -not [string]::IsNullOrWhiteSpace($_) } | Select-Object -Unique)) {
if (Test-Path $Path) {
return (Resolve-Path $Path).Path
$FirefoxPaths += (Resolve-Path $Path).Path
}
}
return $null
return @($FirefoxPaths | Select-Object -Unique)
}
function Get-FirefoxAssociationProgIds {
@@ -124,15 +138,7 @@ function Get-FirefoxAssociationProgIds {
}
}
function Set-FirefoxEnterprisePolicies {
param(
[string]$FirefoxExe
)
$FirefoxDirectory = Split-Path -Parent $FirefoxExe
$DistributionDirectory = Join-Path $FirefoxDirectory "distribution"
$PoliciesPath = Join-Path $DistributionDirectory "policies.json"
function Get-FirefoxEnterprisePolicies {
$Policies = [ordered]@{
policies = [ordered]@{
DontCheckDefaultBrowser = $true
@@ -173,10 +179,29 @@ function Set-FirefoxEnterprisePolicies {
}
}
if ($PSCmdlet.ShouldProcess($PoliciesPath, "Write Firefox enterprise policies")) {
New-Item -Path $DistributionDirectory -ItemType Directory -Force | Out-Null
$Policies | ConvertTo-Json -Depth 12 | Set-Content -Path $PoliciesPath -Encoding UTF8
Write-Host "Firefox enterprise policies written: $PoliciesPath" -ForegroundColor Green
return $Policies
}
function Set-FirefoxEnterprisePolicies {
param(
[string[]]$FirefoxExecutables
)
$Policies = Get-FirefoxEnterprisePolicies
$PoliciesJson = $Policies | ConvertTo-Json -Depth 12
$Utf8NoBom = [System.Text.UTF8Encoding]::new($false)
foreach ($FirefoxExe in ($FirefoxExecutables | Select-Object -Unique)) {
$FirefoxDirectory = Split-Path -Parent $FirefoxExe
$DistributionDirectory = Join-Path $FirefoxDirectory "distribution"
$PoliciesPath = Join-Path $DistributionDirectory "policies.json"
if ($PSCmdlet.ShouldProcess($PoliciesPath, "Write Firefox enterprise policies")) {
New-Item -Path $DistributionDirectory -ItemType Directory -Force | Out-Null
[System.IO.File]::WriteAllText($PoliciesPath, $PoliciesJson, $Utf8NoBom)
Get-Content -Path $PoliciesPath -Raw | ConvertFrom-Json | Out-Null
Write-Host "Firefox enterprise policies written: $PoliciesPath" -ForegroundColor Green
}
}
}
@@ -228,14 +253,15 @@ function Set-FirefoxDefaultAssociations {
Install-FirefoxEsr -PackageId $FirefoxPackageId
$FirefoxExe = Get-FirefoxExecutablePath
$FirefoxExecutables = Get-FirefoxExecutablePaths
if (-not $FirefoxExe) {
if (-not $FirefoxExe -or $FirefoxExecutables.Count -eq 0) {
Write-Error "Firefox was not found after installation. Check the winget package result and retry."
exit 1
}
Write-Host "Firefox found: $FirefoxExe" -ForegroundColor Cyan
Set-FirefoxEnterprisePolicies -FirefoxExe $FirefoxExe
Set-FirefoxEnterprisePolicies -FirefoxExecutables $FirefoxExecutables
Set-FirefoxDefaultAssociations -OutputPath $AssociationsPath
Write-Host ""