PowerShell script for comparing user.js (or prefs.js) files.
MIT License
This script parses user.js files and compares them, logging the results to userJS_diff.log.
Information provided by this script:
Additionally, it can catch one type of syntax error (for now), and includes that information in the report.
You can see an example of what the output looks like here.
PowerShell version 2 (or newer) and .NET 3.5 (or newer), both of which come as standard components of Windows 7, but the script also runs fine on Unix-like systems. You can download the latest version of PowerShell and its dependencies from the official PowerShell repository.
Compare-UserJS requires two parameters: the paths of the two files to be compared. You can pass them directly from the console/terminal, but that is not strictly necessary because the script will prompt you to enter them during execution if you don't.
If you're on *nix you can just skip to the examples.
On Windows you can:
The Compare-UserJS.bat works as a launcher that makes it easier to run the PowerShell script. If you don't want to use said batchfile, you will first have to either:
...relax the execution policy:
# pick one or the other
Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy Unrestricted
...or call the script like this:
PowerShell -ExecutionPolicy Bypass -File Compare-UserJS.ps1 <params>
Index | Name | Required? | Default | Description |
---|---|---|---|---|
0 | filePath_A |
Yes | Path to the first file to compare. (1) | |
1 | filePath_B |
Yes | Path to the second file to compare. | |
2 | ouputFile |
No | userJS_diff.log | Path to the file where the report will be dumped. |
3 | append |
No | false | Append the report to the end of the file if it already exists. |
4 | noCommentsA |
No | false | Parse JS comments in file A as code. (deprecated) |
5 | noCommentsB |
No | false | Parse JS comments in file B as code. |
6 | hideMask |
No | 0 | Bitmask value for hiding parts of the report selectively. (2) |
7 | inJS |
No | false | Get the report written in JavaScript. (3) |
1 - All path parameters can be absolute or relative. 2 - See the embedded help info for details. 3 - It will be written to userJS_diff.js unless the -outputFile parameter is also specified.
See the embedded help info:
Get-Help .\Compare-UserJS -full
Or just read it from the file, but that's less thrilling.
If you encounter any sort of issues with this script in a version of PowerShell higher than v2, try forcing the use of PSv2 like this:
PowerShell -Version 2 -File Compare-UserJS.ps1 <params>
# if you have PowerShell Core, use "pwsh" instead of "PowerShell", like this:
pwsh -Version 2 -File Compare-UserJS.ps1 <params>
Comparing fileA to fileB:
.\Compare-UserJS.ps1 "C:\absolute\path\to\fileA" "..\relative\path\to\fileB"
Comparing fileA.js to fileB.js, and saving the report to report.txt, appending to the end of the file:
.\Compare-UserJS.ps1 "fileA.js" "fileB.js" -outputFile "report.txt" -append
This tool can help you make manual cleanups of your prefs.js too!
.\Compare-UserJS.ps1 prefs.js user.js -hideMask 502 -inJS
Passing any parameters to the BAT is the same, except that you don't need the .\
Compare-UserJS.bat "fileA.js" "fileB.js" -outputFile diff.txt
Thanks to Thorin-Oakenpants and earthlng for their valuable feedback on the initial stages of this little project.