Heute stand ich vor der Herausforderung bestimmte Einstellungen, welche in Firefox im about:config Tab vorgenommen werden an mehrere Rechner zu verteilen.
Dabei waren die folgenden Punkte wichtig:
- Skalierbarkeit (beliebige Anzahl an Endpoints)
- Einfach anpassbar und verständlich
- Nur Windows Bordmittel
Die Herausforderung bestand in den folgenden Punkten:
- Herausfinden wo die about:config einträge gespeichert werden
- Herausfinden wie bestimmte Einstellungen exportiert und importiert werden können
Die about:config Einträge werden in „C:\Users\helpLine\AppData\Roaming\Mozilla\Firefox\Profiles\r8ic3wg3.default\prefs.js“ gespeichert. Diese Datei ändert sich bei jeder Änderung in der about:config. Die Schwierigkeit ist in diesem Fall, dass der Pfad nicht immer gleich lautet, da der Teil des Pfades zwischen \Profiles und \prefs.js auf jedem System einen anderen Namen besitzt.
Um nur bestimmte Einstellungen an die Benutzer zu verteilen, benötigt man eine user.js Datei im selben Ordner wie die prefs.js mit zum Beispiel folgendem Inhalt:
1 2 3 | // NTLM-Domänenkonto für helpLinePortal, helpLine WebDesk , BPMN Modeler user_pref("network.automatic-ntlm-auth.allow-non-fqdn", true); user_pref("network.automatic-ntlm-auth.trusted-uris", "http://hl-train/helpLinePortal,http://hl-train/WebDesk/,http://hl-train/BPMNModeler/"); |
Die Zeilen bekommt man in dem man den gewünschten Eintrag in seinem System verändert und die entsprechenden Zeilen aus der prefs.js kopiert.
Die eigentliche Automatisierung erfolgt nun über ein Powershellskript, welches die user.js aus dem aktuellen Verzeichnis auf das Zielsystem kopiert, dabei wird eine bereits vorhandene user.js in diesem Ordner überschrieben.
Der Inhalt dieses Skriptes lautet wie folgend:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | function Get-ScriptDirectory { $Invocation = (Get-Variable MyInvocation -Scope 1).Value Split-Path $Invocation.MyCommand.Path } # Pfad zum Firefox Profilordner $Test = $env:APPDATA # Pfad zur profiles.ini in welcher der Pfad zum Firefox Benutzerprofil steht $MozillaPath = $Test+"\Mozilla\Firefox\" $FullPath = $MozillaPath+"profiles.ini" # Ausgabe des aktuellen Pfades zur INI #Write-Host -ForegroundColor Green "Current Path to the Firefox Settings:" $FullPath # Zeilenweises einlesen der INI-Datei, leerzeilen ignorieren , Filter nach .default $Text = Get-Content $FullPath | Where-Object {$_ -like '*.default*'} #Debug-Ausgabe der Zeile in der der Pfad zum Firefox Benutzerprofil steht #Write-Host -ForegroundColor Yellow ($Text) # Text ab = bis Ende der Zeile in Variable $MozillaProfile speichern $Split = $Text.split( "=" ) $MozillaProfile = $Split[ $Split.length - 1 ] #Debug-Ausgabe nach String split #Write-Host -ForegroundColor Yellow ( $MozillaProfile ) #Regex zum Ersetzen von / durch \ in $MozillaProfile $MozillaProfile=$MozillaProfile -replace('[\/]','\') #Debug-Ausgabe der Zeile in der Sonderzeichen ersetzt wurde #Write-Host -ForegroundColor Yellow ($MozillaProfile) # Pfad zum Firefox Benutzerprofil zusammensetzen $FireProfilePath = $MozillaPath+$MozillaProfile #Ausgabe des aktuellen Pfades zum FirefoxProfil Write-Host -ForegroundColor Green "Das Firefoxbenutzerprofil liegt in:" $FireProfilePath Write-Host " " #Pfad des akutellen Verzeichnisses in $installpath speichern und mit Dateinamen ergänzen, Ergebnis in $SourceFile $installpath = Get-ScriptDirectory $SourceFile = $installpath+"\user.js" #Kopieren der Datei $SourceFile nach $FireProfilePath | Überschreiben bestehender Dateien im Profil ! Write-Host "Kopieren der Datei:" $SourceFile "nach" $FireProfilePath Copy-Item $SourceFile -Destination $FireProfilePath -passthru | foreach{$_.FullName if($_.FullName) { Write-Host -ForegroundColor Green "Kopieren erfolgreich!" } else {Write-Host -ForegroundColor Yellow "Kopieren fehlgeschlagen!"}} |
Hallo Jannik, danke für dein Skript.
Nach einer solchen einfachen Lösung habe ich schon seit längerer Zeit gesucht.
Grüße Jan