Firefox-Einstellungen automatisch beim Anmelden per VB-Script setzen


Ich betreue einen Windows 2003-Terminal-Server. Dort soll aber dennoch Firefox als Standardbrowser verwendet werden und nicht der Internet Explorer. Da sich aber x Leute dort einloggen können, muss eine Möglichkeit gefunden werden, bestimmte Firefox-Einstellungen vorzugeben, die automatisch angewandt werden, wenn sich diese Person das erste Mal anmeldet. Sehr hilfreich könnte in diesem Zusammenhang FirefoxADM sein, aber für meinen Zweck wäre das Overkill gewesen. So habe ich ein kleines VB-Skript gemacht (oder besser modifiziert), was die für mich wichtigen Einstellungen setzt.

Zuerst muss Firefox zum Standardbrowser gemacht werden. Dazu reicht eine einfach Batch-Datei C:\Windows\setFirefoxDefault.bat mit diesem Inhalt:

@ECHO OFF

"C:\Programme\Mozilla Firefox\firefox.exe" -silent -setDefaultBrowser

Das VB-Script nun klappert alle Firefox-Profile des eingeloggten Nutzers ab und überschreibt in der Datei prefs.js bestimmte Werte. Sollte noch gar kein Profil existieren, wird eines erzeugt. Das Script basiert sehr stark auf dem Script firefox_login.lgns von FirefoxADM, ist aber von mir auf die von mir benötigten Einstellungen geändert worden. Das Script liegt bei mir unter C:\Windows\setFirefoxSettings.vbs.

' Override firefox settings defined in prefs.js in user's profile
' Creates a new profile first if necessary
'
' http://kb.mozillazine.org/About:config_entries
'

Dim FirefoxCacheKey, FirefoxBookmarksKey, DisableXPIInstallations
Dim DisableUpdateNotifications, BrowseWithCaret
Dim StartupHomepage, StartupHomepageReset, StartupHomepageWelcomeURL, StartupHomepageOverrideURL

' Default startup page url
' Set this to "" to skip this setting
StartupHomepage="http://www.bheil.net/blog/"

' If the user requested that their homepage be reset, get the new homepage value from this location
' Set this to "" to skip this setting
StartupHomepageReset="http://www.bheil.net/blog/"

' The URL that Firefox goes to when the user starts up the browser after the initial installation,
' or with a new profile
' http://kb.mozillazine.org/Startup.homepage_welcome_url
' Set this to "" to skip this setting
StartupHomepageWelcomeURL="http://www.bheil.net/blog/"

' The URL that Firefox goes to when the user starts up the browser after upgrading
' http://kb.mozillazine.org/Startup.homepage_override_url
' Set this to "" to skip this setting
StartupHomepageOverrideURL="http://www.bheil.net/blog/"

' Disable XPI (=Extensions) Installations
' Set this to 0 to skip this setting
DisableXPIInstallations = 1

' Disable update notifications
' Set this to 0 to skip this setting
DisableUpdateNotifications = 1

' Number of maximum days to remember visited pages in history (180 in Firefox 3)
' http://kb.mozillazine.org/Browser.history_expire_days
' Set this to 0 to skip this setting
HistoryExpireDays = 60

' Number of minimum days to remember visited pages in history
' http://kb.mozillazine.org/Browser.history_expire_days_min
' Set this to 0 to skip this setting
HistoryExpireDaysMin = 30

' Maximum number of websites to keep in history (40000 in Firefox 3)
' http://kb.mozillazine.org/Browser.history_expire_sites
' Set this to 0 to skip this setting
HistoryExpireSites = 10000

' Max. Cache size in KB
' Set this to 0 to skip this setting
FirefoxCacheKey = 20000

' Standard bookmarks html file (simple Firefox export)
' set to "" to skip this
FirefoxBookmarksKey = "C:\Windows\firefox-standard-bookmarks.html"

' Browse with caret
' http://kb.mozillazine.org/Accessibility.browsewithcaret
' Set this to 0 to skip this setting
BrowseWithCaret = 1

'''''''''''''''''''''''''''''''''''''''''''''''''''''''

set wshShell = WScript.CreateObject("WScript.Shell")
set fso = CreateObject("Scripting.FileSystemObject")

Dim FirefoxProfilePath, FirefoxProfileIniFile, FirefoxPrefsFile, FirefoxProfileFolder, FirefoxProfiles
Dim FirefoxFolder, PrefsFile, ParsePrefsFile, ParseOutPrefsFile, HomePageSetReset, FolderCreate, FirefoxEmptyPrefsFile

on error resume next 

set EnVar = wshShell.environment("Process")
FirefoxProfilePath = EnVar("appdata") & "\Mozilla\Firefox\Profiles"

' Check for an existing firefox profile and create a new one if necessary
if fso.FolderExists(FirefoxProfilePath) = false then
	if fsoFolderExists(EnVar("appdata") & "\Mozilla\Firefox") = false then
		if fsoFolderExists(EnVar("appdata") & "\Mozilla") = false then
			if fsoFolderExists(EnVar("appdata")) = false then
				FolderCreate = fso.CreateFolder(EnVar("appdata"))
			end if
			FolderCreate = fso.CreateFolder(EnVar("appdata") & "\Mozilla")
		end if
		FolderCreate = fso.CreateFolder(EnVar("appdata") & "\Mozilla\Firefox")
		' Create a default profiles.ini file
		Set FirefoxProfileIniFile = fso.CreateTextFile(Envar("appdata") & "\Mozilla\Firefox\profiles.ini")
		FirefoxProfileIniFile.WriteLine("[General]")
		FirefoxProfileIniFile.WriteLine("StartWithLastProfile=1")
		FirefoxProfileIniFile.WriteLine("")
		FirefoxProfileIniFile.WriteLine("[Profile0]")
		FirefoxProfileIniFile.WriteLine("Name=default")
		FirefoxProfileIniFile.WriteLine("IsRelative=1")
		FirefoxProfileIniFile.WriteLine("Path=Profiles/yhc73d.default")
		FirefoxProfileIniFile.Close
	end if
	FolderCreate = fso.CreateFolder(EnVar("appdata") & "\Mozilla\Firefox\Profiles")
	FolderCreate = fso.CreateFolder(EnVar("appdata") & "\Mozilla\Firefox\Profiles\yhc73d.default")
	Set FirefoxEmptyPrefsFile = fso.CreateTextFile(Envar("appdata") & "\Mozilla\Firefox\Profiles\yhc73d.default\prefs.js")
	FirefoxEmptyPrefsFile.Close
end if

if fso.FolderExists(FirefoxProfilePath) then
	set FirefoxProfileFolder = fso.GetFolder(FirefoxProfilePath)
	set FirefoxProfiles = FirefoxProfileFolder.SubFolders

	For Each FirefoxFolder in FirefoxProfiles
		FirefoxPrefsFile = FirefoxProfilePath & "\" & FirefoxFolder.Name & "\prefs.js"
		if fso.FileExists(FirefoxPrefsFile) then
                        ' Set startup pages
			if StartupHomepage <> "" then
				RemoveCurrentPrefsFromFile("browser.startup.homepage")
				set tmp = AppendPrefsToFile("browser.startup.homepage", chr(34) & StartupHomepage & chr(34))
				RemoveCurrentPrefsFromFile("browser.startup.page")
				set tmp = AppendPrefsToFile("browser.startup.page", 1)
			end if

        		if StartupHomepageReset <> "" then
				RemoveCurrentPrefsFromFile("browser.startup.homepage_reset")
				set tmp = AppendPrefsToFile("browser.startup.homepage_reset", chr(34) & StartupHomepageReset & chr(34))
			end if

			if StartupHomepageWelcomeURL <> "" then
				RemoveCurrentPrefsFromFile("startup.homepage_welcome_url")
				set tmp = AppendPrefsToFile("startup.homepage_welcome_url", chr(34) & StartupHomepageWelcomeURL & chr(34))
			end if

			if StartupHomepageOverrideURL <> "" then
				RemoveCurrentPrefsFromFile("startup.homepage_override_url")
				set tmp = AppendPrefsToFile("startup.homepage_override_url", chr(34) & StartupHomepageOverrideURL & chr(34))
			end if

			' Cache
			if FirefoxCacheKey > 0 then
				RemoveCurrentPrefsFromFile("browser.cache.disk.capacity")
				set tmp = AppendPrefsToFile("browser.cache.disk.capacity", FirefoxCacheKey)
			end if

			' Disable XPI Installations
			if DisableXPIInstallations = 1 then
				RemoveCurrentPrefsFromFile("xpinstall.enabled")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.confirm")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.progress.chrome")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.progress.skin")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.progress.type.chrome")
				RemoveCurrentPrefsFromFile("xpinstall.dialog.progress.type.skin")
				set tmp = AppendPrefsToFile("xpinstall.enabled", "false")
				set tmp = AppendPrefsToFile("xpinstall.dialog.confirm", chr(34) & "sorry-installation-permission-denied" & chr(34))
				set tmp = AppendPrefsToFile("xpinstall.dialog.progress.chrome", chr(34) & "sorry-installation-permission-denied" & chr(34))
				set tmp = AppendPrefsToFile("xpinstall.dialog.progress.skin", chr(34) & "sorry-installation-permission-denied" & chr(34))
				set tmp = AppendPrefsToFile("xpinstall.dialog.progress.type.chrome", chr(34) & "sorry-installation-permission-denied" & chr(34))
				set tmp = AppendPrefsToFile("xpinstall.dialog.progress.type.skin", chr(34) & "sorry-installation-permission-denied" & chr(34))
			end if

			' Copy bookmarks file
			if FirefoxBookmarksKey <> "" then
				if fso.FileExists(FirefoxBookmarksKey) then
					fso.CopyFile FirefoxBookmarksKey, FirefoxProfilePath & "\" & FirefoxFolder.Name & "\bookmarks.html"
				end if
			end if

			' Browse with Caret
			if BrowseWithCaret = 1 then
				RemoveCurrentPrefsFromFile("accessibility.browsewithcaret")
				set tmp = AppendPrefsToFile("accessibility.browsewithcaret", "true")
			end if

			' Disable update notifications
			if DisableUpdateNotifications = 1 then
				RemoveCurrentPrefsFromFile("update.showSlidingNotification")
				set tmp = AppendPrefsToFile("update.showSlidingNotification", "false")
				RemoveCurrentPrefsFromFile("update_notifications.enabled")
				set tmp = AppendPrefsToFile("update_notifications.enabled", "false")
			end if

			' History settings
			if HistoryExpireDays > 0 then
				RemoveCurrentPrefsFromFile("browser.history_expire_days")
				set tmp = AppendPrefsToFile("browser.history_expire_days", HistoryExpireDays)
			end if

			if HistoryExpireDaysMin > 0 then
				RemoveCurrentPrefsFromFile("browser.history_expire_days_min")
				set tmp = AppendPrefsToFile("browser.history_expire_days_min", HistoryExpireDaysMin)
			end if

			if HistoryExpireSites > 0 then
				RemoveCurrentPrefsFromFile("browser.history_expire_sites")
				set	tmp = AppendPrefsToFile("browser.history_expire_sites", HistoryExpireSites)
			end if
		end if
	next
end if

Function RemoveCurrentPrefsFromFile(removeSetting)
	Set ParsePrefsFile = fso.OpenTextFile(FirefoxPrefsFile, 1)

	' Get file content into an array:
	Dim aContents
	aContents = Split(ParsePrefsFile.ReadAll, vbCrLf)

	ParsePrefsFile.Close
	set ParsePrefsFile = Nothing

	' Parse Back In to Prefs.js file
	Dim aContentsNew
	aContentsNew = Filter(aContents, chr(34) & removeSetting & chr(34), False, vbTextCompare)

	' Overwrite the old file with the new file,
  	Set ParseOutPrefsFile = fso.OpenTextFile(FirefoxPrefsFile, ForWriting)
  	ParseOutPrefsFile.Write Join(aContentsNew, vbCrLf)
    ParseOutPrefsFile.Close
End Function

Function AppendPrefsToFile(writeKey, writeData)
 	set PrefsFile = fso.OpenTextFile(FirefoxPrefsFile, 8)
	PrefsFile.Write("user_pref(" & chr(34) & writeKey & chr(34) & ", " & writeData & ");" & vbNewLine)
	PrefsFile.Close
End Function

Auf diese beiden Dateien kann dann im Gruppenrichtlinienobjekt-Editor unter Benutzerkonfiguration -> Windows-Einstellungen -> Skripts -> Anmelden verwiesen werden, so dass die Skripte beim Login automatisch ausgeführt werden. (Ist die Microsoft-Welt nicht was schönes? Gruppenrichtlinienobjekt-Editor, da freut sich jeder Beamte Wink! Aufrufen mit: Start -> Ausführen -> gpedit.msc)

Anmeldeskripts

Zwar kann der Nutzer die Einstellungen ändern, aber beim nächsten Login werden diese wieder überschrieben.

Nachtrag: Wenn der Nutzer sich das erste Mal anmeldet, wird er vom Import-Dialog des Firefox begrüßt. Das kann einfach deaktiviert werden. Dazu wird eine Datei override.ini im Ordner des Firefox erzeugt (muss bei der firefox.exe liegen) mit folgendem Inhalt:

[XRE]
EnableProfileMigrator=false

Windows 7: Automatischen Neustart nach Einspielen von Updates verhindern


Windows will nach dem Einspielen von Sicherheitsupdates sehr oft neu gestartet werden, was auch wichtig ist, da sonst die Updates nicht greifen. Bei PCs, die jedoch sowieso täglich manuell neu gestartet werden (Arbeitsrechner etc.), kann dieses Verhalten schon nerven. Mit einem Registry-Eintrag kann das ausgeschaltet werden:

  • * Registrierungseditor öffnen (Win- bzw. Super-Taste + R -> "regedit")
  • * Zu HKEY_LOCAL_MACHINE\SOFTWARE\Polices\Microsoft\Windows navigieren
  • * Einen neuen Schlüssel anlegen mit dem Namen WindowsUpdate
  • * Darin ein 32bit-DWORD anlegen mit dem Namen NoAutoRebootWithLoggedOnUsers und diesen Wert auf 1 setzen

Ein Einblick in die Architektur von Hotmail


Ein interessanter Artikel, der einen Einblick gibt, wie große Webdienste mit enormen Datenmengen zurechtkommen: Einblick in Hotmail

Ach, und btw: Frohe Weihnachten! Wink

Informationen zur Windows-Aktivierung


Mit dem Tool slmgr.vbs kann die Windows-Aktivierung von Vista und 7 angesprochen werden. Interessant sind hierbei vor allem folgende Parameter:

slmgr.vbs /dlv  Detailierte Informationen anzeigen
slmgr.vbs /xpr  Ablaufdatum der Aktivierung
slmgr.vbs /ato  Aktivierungsprozess manuell anstoßen
slmgr.vbs /rearm  Frist zum Aktivieren verlängern (geht 3x zu je 30 Tagen)
slmgr.vbs /?  Alle Optionen anzeigen

Windows 7: Klassische Taskleiste wiederherstellen


Windows 7 führt eine neue Taskleiste ein. So schön diese anzusehen ist: In einigen Anwendungsfällen ist die alte, von Windows XP gewohnte, besser. Leider hat Microsoft keine Möglichkeit vorgesehen, das alte Verhalten wieder einzuschalten. Aber mit etwas Eigeninitiative kann das alte Verhalten fast komplett wiederhergestellt werden. Am Ende sieht das dann so aus:

Win7 mit klassischer Taskleiste


Mami, warum haben wir einen Server im Haus?


Oh meine Güte. Erst dachte ich ja, dieser Artikel ist ein Scherz, aber die Leute bei Microsofts Marketing-Abteilung haben anscheinend viel Zeit und Fantasie. Wink

Microsoft hat ein Kinderbuch veröffentlicht, in dem erklärt wird, warum man einen Heimserver (natürlich mit Windows) braucht:
Buch-Cover
A "stay-at-home" server: you know it's the right thing for your family. But how do you explain this wonderful choice to your children? Finally, there's a book that talks about the home server using small words and fun pictures, perfect for kids. Written by Tom O'Connor and lovingly illustrated by Jill Dublin, this is a book you and your family will want to read over and over again.

Ein Link sagt mehr als tausend Worte:
http://www.amazon.com/Mommy-Why-There-Server-House/dp/160530641X/

Auf der Microsoft-Webseite dazu gibts noch mehr tolle Sachen zum Lesen, z.B. das "Server Feng Shui". Tja, das muss man gelesen haben.

Windows 7 Beta zum Ausprobieren


Heute hat Microsoft die Beta-Version vom Vista-Nachfolger Windows 7 für alle zum Download angeboten (siehe auch in Microsofts Technet-Blog). Leider sind die Server von Microsoft dem Ansturm nicht gewachsen und es erscheinen tolle Meldungen wie "Server is too busy...". Das dürfte daran liegen, dass es nur 2,5 Millionen Downloads (bzw. Keys) geben wird, und somit alle Interessierten nun natürlich die ersten sein wollen. Diese Vorstellung ging wohl etwas in die Hose.

Im Gegensatz zu dieser Demonstration eines gelungen, selbst verschuldeten DDOS sieht Windows 7 allerdings schon recht annehmlich aus. Ich habe es in VirtualBox ausprobiert (aber nur einigen Minuten bisher, also kein ausführlicher Test) und es geht wirklich richtig fix. Die neue Taskleiste ist zwar gewöhnungsbedürftig, aber nicht schlecht. Ob sie wirklich besser ist, wird nur ein längerer Test ans Licht bringen. Toll finde ich vor allem die Tools zur Systemüberwachung, die zwar tief versteckt sind, aber richtig schönen Einblick gewähren.

Wer nicht so lange warten will, bis die MS-Server wieder gehen, hier sind Direkt-Links zu der englischen Version (ich habe aber keine Ahnung, wie lang diese gültig sein werden):

32-Bit 64-Bit

Zwar fehlt dann immer noch der Beta-Key, aber angeblich soll auch die Freischaltung für einen weiteren Testraum wie damals bei Vista funktionieren (siehe Heise-Artikel). Da die Beta sowieso am 01. August den Dienst einstellt, dürfte das für Tests locker reichen.

Vielleicht wird Windows 7 wirklich der Nachfolger von XP. Was ich da bisher gesehen habe, lässt zumindest hoffen ...

T-Shirts von Microsoft: Verfrühter April-Scherz?


Microsoft will anscheinend T-Shirts verkaufen. Mit Logos aus den alten Dos-Zeiten oder aus Bills "schlimmen" Jugendjahren. Diese Kampagne kostet auch nur schlappe 300 Millionen.

Ich weiß ja nicht, wie ihr das seht, aber das schwankt irgendwo zwischen lächerlich und peinlich. Anstatt das Geld in die eigene Software zu stecken, wird am "Image" gefeilt. Das kommt davon, wenn Marketing-Fuzzies den Laden schmeissen. Ich kann da nur den Kopf schütteln.

Hoffentlich gibts irgendwann mal ein Shirt mit Bluescreen; das wäre wenigstens selbstironisch. Oder ein Shirt mit Ballmer in liebevoller Umarmung mit einem Stuhl. Wink

Automatischer Download von Dateien über SCP unter Windows (mittels WinSCP)


Gerade erst hatte ich beschrieben, wie ein Download per FTP unter Windows automatisierbar ist, zum Beispiel für Backup-Zwecke. Aber so ganz glücklich bin ich mit dieser Methode nicht: Ein Backup von wichtigen Dateien über ein unsicheres Protokoll wie FTP ist nicht gerade das, was ruhig schlafen lässt. Zwar könnte FTPS oder FTPES zum Einsatz kommen, aber das wird nicht vom Standard-FTP-Kommandozeilen-Client von Windows unterstützt. Entsprechende Drittprogramme waren entweder nicht frei oder nicht für die Kommandozeile geeignet.

Aber wenn ein Zugang per SSH zum Server besteht, kann der Download auch über SCP erfolgen und somit verschlüsselt ablaufen. Dafür bietet sich der Einsatz von WinSCP an, einem freien Open-Source-SFTP-Client für Windows.

Um das ganze zu automatisieren, legen wir wieder eine Batch-Datei an, die den Download startet. Folgende Batch-Datei startet WinSCP mit den richtigen Parametern:

@echo off
C:
cd \Programme\WinSCP
winscp.exe /console /script=E:\Backups\Server\SCP_ANWEISUNGEN.txt /log=E:\Backups\Server\SCP_BACKUP.log

Auch hier werden die eigentlichen Anweisungen für WinSCP in eine extra Datei gespeichert. In obigem Beispiel ist das die Datei E:\Backups\Server\SCP_ANWEISUNGEN.txt. Diese enthält folgendes:

option batch on
option confirm off
open USER:_PASSWORD_@HOST
cd REMOTE_DIR
option transfer binary
get * LOCAL_DIR\*
close
exit

Hier müssen die Werte in Großbuchstaben angepasst werden, also USER, PASSWORD, HOST, REMOTE_DIR und LOCAL_DIR. Damit werden alle Dateien in REMOTE_DIR in das Verzeichnis LOCAL_DIR heruntergeladen.

Das Kommunikations-Log wird dabei von WinSCP in die Datei E:\Backups\Server\SCP_BACKUP.log gespeichert. Kommt es zu Fehlern, kommt man diesem meist recht schnell durch das Log auf die Schliche.

Automatisches FTP-Backup unter Windows


Hinweis: Diese Methode ist unverschlüsselt und sollte daher nicht für wichtige Dateien verwendet werden! Wenn Zugriff per SSH besteht, ist diese Methode über SCP vorzuziehen!

Folgende Batch-Datei ist ein Äquivalent zu diesem Shell-Skript. Es lädt alle Dateien von einem FTP-Server herunter. Damit kann zum Beispiel ein automatisches Backup eingerichtet werden.

Unter Windows (XP in diesem Fall) erzeugt man dazu eine Batch-Datei mit folgendem Inhalt (z.B. ftp_backup.bat):

@echo off
E:
cd \Backups\Server
ftp -i -s:E:\Backups\FTP_ANWEISUNGEN.txt

Dies wechselt in das Verzeichnis, in dem später die heruntergeladenen Dateien landen sollen (hier E:\Backups\Server). Für den Download wird das interne FTP-Progrämmchen von Microsoft verwendet. Was das FTP-Programm tun soll, muss in einer zweiten Datei notiert und per Option übergeben werden. In obigem Beispiel ist das die Datei E:\Backups\FTP_ANWEISUNGEN.txt.
Diese hat für einen Download aller Dateien folgenden Inhalt:

open FTPHOST
USERNAME
PASSWORD
binary
mget *
quit

Natürlich müssen hier noch die entsprechenden Werte für FTPHOST, USERNAME und PASSWORD eingetragen werden. Das ganze schaltet dann in den binären Übertragungsmodus und lädt jede Datei in das aktuelle Verzeichnis herunter. Dabei werden schon bestehende, lokale Dateien überschrieben.

Das kann man dann in der Systemsteuerung noch über einen automatischen Task zeitgesteuert starten lassen oder einfach eine Verknüpfung in den Autostart-Ordner legen, wenn der Rechner jeden Tag neu gestartet wird.
Vorherige Einträge  Vorherige Einträge