1
0
vrac/deployer-firefox-en-entreprise/customFirefoxInstaller.ps1
2020-05-13 12:47:32 +02:00

163 lines
6.5 KiB
PowerShell

####################################################################################################################################
#### Script : customFirefoxInstaller.ps1
#### Description : Script permettant d'automatiser la création d'un installeur personnalisé de Firefox (40 et +)
#### Source : https://inios.fr/deployer-firefox-en-entreprise
#### Auteur : alexandre@inios.fr
####################################################################################################################################
## Dossier d'origine
$DIR_root = "C:\firefox_work";
$DIR_installeur = "$DIR_root\installeur";
$DIR_custom = "$DIR_root\custom"
$DIR_make = "$DIR_root\make";
$TOOL_7zip = "$DIR_root\7zip\App\7-Zip\7z.exe";
$FILE_7z = "$DIR_make\app.7z";
$FILE_tag = "$DIR_make\app.tag";
$FILE_exe = "$DIR_make\firefox-custom.exe";
## Compteur
$iterator = 1;
# Récupérer le répertoire de démarrage du script
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
####################################################################################################################################
## Vérification des pré-requis
####################################################################################################################################
## Vérification de l'existance des répertoires
if (!(Test-Path $DIR_root)) {
Write-Host "Le répertoire $DIR_root n'existe pas !";
$choice = Read-Host "Appuyer sur une touche pour sortir...";
exit;
}
if (!(Test-Path $DIR_installeur)) {
Write-Host "Le répertoire $DIR_installeur n'existe pas !";
$choice = Read-Host "Appuyer sur une touche pour sortir...";
exit;
}
if (!(Test-Path $DIR_custom)) {
Write-Host "Le répertoire $DIR_custom n'existe pas !";
$choice = Read-Host "Appuyer sur une touche pour sortir...";
exit;
}
if (!(Test-Path $DIR_make)) {
Write-Host "Le répertoire $DIR_make n'existe pas !";
$choice = Read-Host "Appuyer sur une touche pour sortir...";
exit;
}
## Vérification de la disponibilité de 7z.exe
if (!(Test-Path $TOOL_7zip)) {
Write-Host "L'utilitaire $TOOL_7zip n'est pas disponible !";
$choice = Read-Host "Appuyer sur une touche pour sortir...";
exit;
}
####################################################################################################################################
## Traitement
####################################################################################################################################
## Afficher le contenu du répertoire stockant l'installeur
# Explication
Write-Host "Les dossiers suivant sont situés dans $DIR_installeur, veuillez choisir celui que vous souhaitez utiliser en indiquant le numéro entre crochet.";
# Récupérer la liste des installeurs
[array] $items = Get-ChildItem "$DIR_installeur\" | Where-Object {$_.extension -eq ".exe"} | Sort-Object "LastWriteTime";
# Afficher la liste des dossiers avec le numéro
foreach ($item in $items) {
Write-Host "[$iterator] - $item";
$iterator++;
}
# Choisir le dossier
$choice = Read-Host "Choisir le numéro du dossier à personnaliser";
$choice = $items[$choice-1];
$archive = "$DIR_installeur\$choice";
$choice = $archive.replace('.exe','');
## Supprimer le répertoire si il existe déjà
if (Test-Path $choice) {
Remove-Item -Force -Recurse $choice;
}
## Extraire l'installeur
Invoke-Expression "$TOOL_7zip x '$archive' -o'$choice'";
## Suppression de fonctionnalités embarquées
# Firefox Hello
$file_path = "$choice\core\browser\features\loop@mozilla.org.xpi";
if (!(Test-Path $file_path)) {
Write-Host "Firefox Hello n'est pas embarqué dans cette version de Firefox";
}
else {
Remove-Item -Force $file_path;
}
# Pocket
$file_path = "$choice\core\browser\features\firefox@getpocket.com.xpi";
if (!(Test-Path $file_path)) {
Write-Host "Firefox Pocket n'est pas embarqué dans cette version de Firefox";
}
else {
Remove-Item -Force $file_path;
}
## Copie des fichiers de personnalisation
# autoconfig.js
$file_path = "$DIR_custom\autoconfig.js";
if (!(Test-Path $file_path)) {Write-Host "Le fichier autoconfig.js n'existe pas dans $DIR_custom"; $choice = Read-Host "Appuyer sur une touche pour sortir..."; exit;}
Copy-Item -Path $file_path -Destination "$choice\core\defaults\pref";
# custom.cfg
$file_path = "$DIR_custom\custom.cfg";
if (!(Test-Path $file_path)) {Write-Host "Le fichier custom.cfg n'existe pas dans $DIR_custom"; $choice = Read-Host "Appuyer sur une touche pour sortir..."; exit;}
Copy-Item -Path $file_path -Destination "$choice\core";
# profile (si présent)
$file_path = "$DIR_custom\profile";
if (Test-Path $file_path) {Copy-Item -Path $file_path -Destination "$choice\core\defaults" -Recurse;}
# dictionnaires (si présent)
$file_path = "$DIR_custom\dictionaries\*";
if (Test-Path $file_path) {Copy-Item -Path $file_path -Destination "$choice\core\dictionaries";}
# extensions (si présent)
$file_path = "$DIR_custom\extensions";
if (Test-Path $file_path) {Copy-Item -Path $file_path -Destination "$choice\core";}
## Créer l'archive de base
# Entrer dans le dossier à personnaliser
Set-Location $choice;
# SI le fichier personnalisé existe, ALORS le supprimer
if (Test-Path $FILE_7z) {
Remove-Item $FILE_7z;
}
# Créer le fichier personnalisé
cmd /c "$TOOL_7zip a -r -t7z $FILE_7z -mx -m0=BCJ2 -m1=LZMA:d24 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3";
## Créer le fichier "app.tag"
# SI le fichier n'existe pas, ALORS le créer
if (!(Test-Path $FILE_tag)) {
Add-Content -Path $FILE_tag -Value ';!@Install@!UTF-8!';
Add-Content -Path $FILE_tag -Value 'Title="Mozilla Firefox"';
Add-Content -Path $FILE_tag -Value 'RunProgram="setup.exe"';
Add-Content -Path $FILE_tag -Value ';!@InstallEnd@!';
}
## Créer l'installeur
# SI le fichier personnalisé existe, ALORS le supprimer
if (Test-Path $FILE_exe) {
Remove-Item $FILE_exe;
}
# Créer le package d'installation
cmd /c "copy /B $DIR_make\7zSD.sfx+$DIR_make\app.tag+$DIR_make\app.7z $FILE_exe";
## Attendre pour sortir
Write-Host "L'installeur personnalisé est disponible dans $DIR_make sous le nom firefox-custom.exe";
$choice = Read-Host "Appuyer pour terminer...";
## Retourner sur l'emplacement d'origine
Set-Location $scriptPath