PDQ.com mobilePDQ.com desktop
Support
general-blog-image-04

Silently Change Firefox Default Search Engine

Lisa Dodd
·

Oh, Yahoo! when will you learn you can't buy friends? Firefox set the default search engine to Yahoo! back in 2014. Since then sys admins have been battling the forced setting. Looking to silently change Firefox default search engine in your network? Can do.

Package Library

Changing search engines on an individual basis is simple. To make the change on your own home computer read this. If you manage a network of computers, read on.

Silently Change Firefox Default Search Engine

PDQ Deploy has a ready-to-deploy, silently installing deployment that will change the Firefox search engine to Google for all your users. In PDQ Deploy, go to the Package Library and import Mozilla Firefox - Set Google as Search Engine. Send this package to any of your target Windows computers that have Mozilla Firefox installed. Upon reboot, your users will have Google set as their browsers. You can choose targets from Active Directory, PDQ Inventory, Spiceworks, etc. How do I use the Package Library?

But let's break down what's in the package.

The package uses the following PowerShell script to make the change. This PowerShell script is provided by the illustrious Kris Powell. (Check out his PowerShell blogs.) This script updates all user profiles on the target computer, if a Firefox profile folder exists for a user. Your users will see the change after they restart their Firefox browser.

Param(
[string]$SearchProvider="Google"
)

$disclaimer = "By modifying this file, I agree that I am doing so only within Firefox itself, using official, user-driven search engine selection processes, and in a way which does not circumvent user consent. I acknowledge that any attempt to change this file from outside of Firefox is a malicious act, and will be responded to accordingly."
$Pattern = "{`"\[global\]`"\:{`"current`"\:`"(.*)`",`"hash`"\:`"(.*)`"}}"
$Encoding = [System.Text.Encoding]::UTF8
$Hasher = New-Object ([System.Security.Cryptography.SHA256]::Create())

Get-ChildItem -Path "$env:public\..\*\AppData\Roaming\Mozilla\Firefox\Profiles\*" | Where-Object { $_.PSIsContainer } | ForEach-Object {

$result = [System.Convert]::ToBase64String($Hasher.ComputeHash($Encoding.GetBytes($_.Name + $SearchProvider + $disclaimer)))
$File = "$($_.FullName)\search-metadata.json"
$Data = "{`"[global]`":{`"current`":`"$SearchProvider`",`"hash`":`"$result`"}}"
$SearchJsonMozlz4 = "$($_.FullName)\search.json.mozlz4"

If (-Not (Test-Path $File)) {New-Item -Path $file -ItemType file}

(Get-Content $File) | Foreach-Object {
If ($_ | Select-String -Pattern $Pattern) {
$_ -replace $Pattern, $Data
} else {
$data
}
} | out-file $File -Encoding utf8

If ((Get-Content $File) -eq $Null) {
$Data | Out-file $File -Encoding utf8
}
If (Test-path $SearchJsonMozlz4) {Remove-Item $SearchJsonMozlz4 -Force}
}

What if I Want Something Other Than Google?

You can use any installed search provider as a value to update. By default in the US-version of Firefox, these values include:

  • Amazon.com

  • Bing

  • DuckDuckGo

  • Google

  • Twitter

  • Wikipedia (en)

  • Yahoo

Put your choice of search engine in place of Google. (Images below show the script in a PowerShell step within PDQ Deploy).

Copying script and modifying the default value directly

The script (as it currently is written) supports a $SearchProvider parameter with a default value. You can change script every time or just change the parameter when calling the script. Changing both is not required. 

calling the script and using the SearchProvider parameter

If you used the package from the Package Library, you would simply open up the imported package and edit the parameter field to your desired search engine.

silently change Firefox default search engine

Don't miss the next post!

How PowerShell can calculate your retirement

How PowerShell can track 401K growth

In this blog, I use PowerShell to focus and build a 401k calculator because its tax advantages make it ideal to build your retirement nest egg.

PowerShell