Når Mozilla Firefox markeres som usanksjonert i vårt miljø, er mitt neste trekk å rydde opp i eksisterende installasjoner på alle administrerte enheter.

Før vi standardiserte nettleserne våre, stod brukerne fritt til å installere det de ville, noe som førte til at Firefox ble spredt over hundrevis av maskiner. Jeg kaster ikke bort tid på manuell opprydding; jeg har automatisert hele prosessen.

Kartlegging i stor skala med KQL

Jeg starter med å få et klart bilde av omfanget. Jeg bruker KQL (Kusto Query Language) i Defender Advanced Hunting for å se nøyaktig hvilke versjoner som finnes og hvor mange enheter som er berørt:

// Min spørring for Firefox-kartlegging
DeviceTvmSoftwareInventory
| where SoftwareName contains "Firefox"
| summarize DeviceCount = dcount(DeviceName), Versions = make_set(SoftwareVersion) by SoftwareName
| order by DeviceCount desc

Denne spørringen gir meg umiddelbar oversikt over antall enheter og versjoner, noe jeg bruker for å målrette Intune-utbedringene mine effektivt.

Strategien: Automatisere oppryddingen

Jeg bruker Intune Proactive Remediation med et to-skripts system:

  • Deteksjon: Finner Firefox i registeret, Program Files og brukerprofiler.
  • Utbedring (Remediation): Fjerner alt—prosesser, filer, snarveier, tjenester og planlagte oppgaver.

Deteksjonslogikk

Skriptet mitt skanner tre hovedområder hvor Firefox liker å gjemme seg:

  1. Registeret - 64-bit/32-bit avinstalleringsnøkler og per-bruker installasjoner.
  2. Program Files - Standard installasjonsplasseringer.
  3. Brukerprofiler - AppData-mapper.
$findings = @()
$uninstallPaths = @(
    "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",
    "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall",
    "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
)

foreach ($path in $uninstallPaths) {
    if (Test-Path $path) {
        $apps = Get-ItemProperty "$path\*" -ErrorAction SilentlyContinue |
            Where-Object { $_.DisplayName -like "*Firefox*" }
        foreach ($app in $apps) {
            $findings += "Registry: $($app.DisplayName)"
        }
    }
}

if ($findings.Count -gt 0) { exit 1 } else { exit 0 }

Komplett skript: firefox-removal-detection.ps1

Selve fjerningen: Remediation

Utbedringsskriptet mitt er designet for å være grundig. Det stopper alle aktive prosesser før det prøver å avinstallere, for å sikre at ingen filer er låst.

  1. Stopp prosesser - Firefox, plugin-container og oppdateringsprogrammer.
  2. Avinstaller - Bruker avinstalleringsstrengen fra registeret (håndterer både helper.exe og msiexec).
  3. Opprydding - Sletter mapper i Program Files, ProgramData og AppData.
  4. Siste finpuss - Fjerner snarveier, tjenesten MozillaMaintenance og oppdateringsoppgaver.
# Min liste over prosesser som skal stoppes
$firefoxProcesses = @("firefox", "firefox-esr", "plugin-container", "crashreporter", "updater")
foreach ($proc in $firefoxProcesses) {
    Get-Process -Name $proc -ErrorAction SilentlyContinue | Stop-Process -Force
}

Komplett skript: firefox-removal-remediation.ps1

Resultat og verifisering

Jeg overvåker fremdriften direkte i Intune-portalen under Devices > Scripts and remediations.

Suksess betyr at enhetene får status “fixed”. Jeg sjekker også mine egne logger på C:\ProgramData\Eriteach\Logs\ hvis jeg ser installasjoner som krever en manuell titt.

Erfaringer

  • Brukerprofiler - Skriptet rydder alle profiler på maskinen. Jeg varsler alltid brukerne om at bokmerker og lagrede passord vil forsvinne.
  • Tvangslukking - Siden jeg tvinger prosessen til å avslutte, kjører jeg denne utbedringen i vedlikeholdsvinduer for å minimere forstyrrelser.

Relaterte lenker