Im Windows Netzwerk Schriftarten zu verteilen war komplexer als gedacht. Daher möchte ich mal oberflächlich die möglichen Verteilungsmethoden erläutern und meine Empfehlung geben. Die besten Lösung ist ganz unten, Stichwort FontReg.exe. Ziel ist die Verteilung (also Installation zur Verwendung) von Schriftarten in Windows Netzwerken über Gruppenrichtlinien.
Dafür gibt es verschiedene Methoden: Batch, GPO, VBS und FontReg.
Batch (nicht empfohlen)
REM alle Schriftarten aus dem fonts Unterordner in den Fonts Systemordner kopieren xcopy fonts\*.* "%windir%\Fonts\" /v /c /l /y /i REM jede Schriftart einzeln in der Registry anmelden reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "OpenSans-Bold (True Type)" /t REG_SZ /d "OpenSans-Bold.ttf" /f reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "OpenSans-BoldItalic (True Type)" /t REG_SZ /d "OpenSans-BoldItalic.ttf" /f ...
Der Registry Befehl muss für jede gewünschte Schriftart ausgeführt werden.
GPO (nicht empfohlen)
Wie schon GPO Meister Heitbrink erklärt hat:
In der Gruppenrichtlinie unter Computerkonfiguration\Einstellungen\Windows-Einstellungen\Dateien folgende Einstellung für jede Schriftart erstellen:
In der Quelle bitte den korrekten \\server\pfad\ angeben. Dadurch werden die Schriften in den Windows Ordner kopiert.
Nun noch in Computerkonfiguration\Einstellungen\Windows-Einstellungen\Registry folgende Einstellungen, ebenfalls einmal pro Schriftart:
Den Registry Pfad so übernehmen wie auf dem Bild, „Name“ enthält den Anzeigenamen innerhalb von Programmen, bei der Fontdatei kein Pfad mehr davor packen, nur der Dateiname.
Nachteil
Beide Lösungen sind nicht sehr aufwändig, 2 Batch Befehle bzw. 2 GPO Einstellungen, simpel. Viel eher hat es den Nachteil, dass man bei einer größeren Menge an Schriftarten dann doch recht viel zu tun hat. 20 Schriftarten? Das bedeutet viel rumgetippe.
Besser ist in diesem Fall folgende Lösung:
VBS (nicht empfohlen)
Dieses VBS installiert alle Fontdateien, die sich in einem bestimmten Ordner befinden. Der Ordner wird in strFontSourcePath angegeben.
' via http://www.morovia.com/kb/Installing-Fonts-command-script-10008.html ' didnt work as is, some more lines were needed to make it work Option Explicit Dim objShell, objFSO, wshShell Dim strFontSourcePath, objFolder, objFont, objNameSpace, objFile, oWinFonts Set objShell = CreateObject("Shell.Application") Set wshShell = CreateObject("WScript.Shell") Set objFSO = createobject("Scripting.Filesystemobject") strFontSourcePath = "\\server\Deployment\Sonstiges\fonts\fonts\" If objFSO.FolderExists(strFontSourcePath) Then Set objNameSpace = objShell.Namespace(strFontSourcePath) Set objFolder = objFSO.getFolder(strFontSourcePath) Const FONTS = &H14& Set oWinFonts = objShell.Namespace(FONTS) For Each objFile In objFolder.files If LCase(right(objFile,4)) = ".ttf" Then If objFSO.FileExists(wshShell.SpecialFolders("Fonts") & "\" & objFile.Name) Then Else Set objFont = objNameSpace.ParseName(objFile.Name) oWinFonts.CopyHere objNameSpace.ParseName(objFile.Name) objFont.InvokeVerb("Install") Set objFont = Nothing End If End If Next Else Wscript.Echo "Font Source Path does not exists" End If
Die Einbindung in das Netzwerk könnte direkt als Startscript erfolgen. Wenn man jedoch einen leichten Überblick haben möchte, welche Computer die Schriften schon installiert haben, empfiehlt sich dieses Script:
@echo on && color 9f && setlocal set wd=\\server\Deployment\Sonstiges\fonts set log=%wd%\install-fonts.txt echo %date% %time:~0,8% - %computername% startet die Fontinstallation >> %log% cmd /c cscript //nologo "%wd%\install-fonts.vbs" ::REM Test mit zwei beliebigen Schriftarten if exist "%windir%\fonts\OpenSans-SemiboldItalic.ttf" echo %date% %time:~0,8% - %computername% hat OpenSans installiert >> %log% if exist "%windir%\fonts\Lato-ThinItalic.ttf" echo %date% %time:~0,8% - %computername% hat Lato installiert >> %log% :end endlocal
Das Script loggt Start und Ende der Schriftinstallation und prüft die erfolgreiche Installation mit 1 beliebigen Schriftart. Ein Neustart muss aber auch bei dieser Methode sein.
Aber egal ob dieser Code, diese Kurzfassung oder anderen Varianten, und egal wie man es dreht und wendet – zu 100% zuverlässig sind die Skripte nicht. Auch in meinem Netzwerk wollten ca. 10% der Rechner diese Variante nicht annehmen.
FontReg.exe (empfohlen)
Nach weiterer Recherche fand ich eine Lösung, die SO einfach ist, dass es mich schon fast aufregt, auf dem Weg dorthin etliche Stunden nicht nicht 100% funktionierende Skriptlösungen investiert zu haben. FontReg ist die Lösung, eine Weiterentwicklung des älteren Windows Utilities fontinst.exe.
Das Tool, wenn es ohne weitere Parameter aufgerufen wird, repariert fehlerhafte oder fehlende Schriftartenverknüpfungen und ermöglicht damit einen einfachen Zweizeiler für die Schriftverteilung:
xcopy "\\server\Deployment\Sonstiges\fonts\fonts\*.*" "c:\Windows\Fonts" /y "\\server\Deployment\Sonstiges\fonts\FontReg.exe"
Awesome! 🙂
funzt 😉
mit welcher methode?
vbs
Matze Möhr liked this on Facebook.
TOP !!! Danke
Bitte bitte 🙂
Vielen Dank du hast mir enorm geholfen….!
Danke, hat sehr geholfen!
Vor allem das mit VBS war interessant.
Hier hab ich noch einen Beitrag gefunden, in dem das mit GPO genauer erklärt wird:
https://www.itnator.net/schriftart-verteilen-mit-gruppenrichtlinie/
Gruß Sabine
Der Link zu FontReg funktioniert nicht mehr, weil scheinbar die Homepage vom Netz genommen wurde.
Aber ich bin auf Github fündig geworden.
https://github.com/KANT9S/FontReg
Es scheint auch so zu sein, dass in diesem Tool der Copy Befehl mit eingebaut ist.
Danke Sven für das Feedback! Ich habe den neuen Link direkt im Artikel eingebaut.
„einen einfachen Zweizeiler“
und wohin mit dem „einfachen“ Zweizeiler???