В этой статье мы рассмотрим способы установки шрифтов на компьютерах в домене Active Directory с помощью групповой политики и PowerShell скрипта. Данная инструкция протестирована на актуальных билдах Windows 10 20H2 и Windows Server 2016/2019.
Установка шрифта через групповые политики
Если вам нужно установить один-два новых шрифта, можно выполнить эту задачу с помощью возможностей Group Policy Preferences в GPO. Для установки шрифта нужно скопировать *.ttf файл на клиентский компьютер в каталог %WindowsDir%\Fonts\ и внести информацию о новом шрифте в ветку реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts.
- Скопируйте ttf файл шрифта в общую папку на файловом сервере (если шрифтов немного, можно использовать для хранения шрифтов каталог SYSVOL на контроллере домена);
- Запустите редактор доменных GPO (
gpmc.msc
), создайте новую политику GPO_InstallFonts и назначьте ее на OU с компьютерами; - Перейдите в режим редактирования политики;
- С помощью Group Policy Preferences нужно создать правило для копирования файла шрифта из сетевой папки в каталог
%WindowsDir%\Fonts\
на клиентах. Ранее мы показывали, как скопировать файл на компьютеры через GPO. Создайте политику по аналогии. Перейдите в Computer Configuration -> Preferences -> Windows Settings -> Files. Создайте политику с параметрами:Source:\\resource.loc\SYSVOL\resource.loc\scripts\Fonts\Roboto-Black.ttf
Destination:%WindowsDir%\Fonts\Roboto-Black.ttf
- Теперь нужно внести в реестр информацию о новом шрифте. Для внесения изменения в реестр через GPO можно также использовать GPP (Computer Configuration -> Preferences -> Windows Settings -> Registry);
- Вы можете вручную указать информацию о шрифте в реестре. Но гораздо проще вручную установить шрифт на любой компьютером и с помощью мастера импортировать настройки ключа реестра (Computer Configuration -> Preferences -> Windows Settings -> Registry -> New -> Registry Wizard);
- С помощью Registry Browser перейдите в ветку HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts на удаленном компьютере. Найдите и выделите параметр реестра с именем шрифта, который вы хотите установить;
- В редакторе GPO должен появиться этот параметр реестра.
Теперь нужно обновить настройки групповых политик на клиенте и проверить, что новый шрифт установился. В Windows 10 список установленных шрифтов доступен в новой панели управления (Settings -> Personalization -> Fonts).
gpresult
. Далее следуйте обычной методике диагностики проблем с применением GPO к компьютерам.Установка шрифтов с помощью логон скрипта PowerShell
Рассмотренные выше способ установки шрифтов через GPO удобно использовать, если нужно установить несколько шрифтов. Если вы хотите установить сразу множество новых файлов шрифтов, лучше воспользоваться PowerShell скриптом, т.к. создание для каждого шрифта отдельных параметров политики может быть утомительным.
Следующий PowerShell скрипт установит все *.ttf и *.otf файлы шрифтов, которые хранятся в указанной сетевой папке. Дополнительно скрипт с помощью функции WriteLog записывает информацию о действиях в лог файл.
function WriteLog
{
Param ([string]$LogString)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp $LogString"
Add-content $LogFile -value $LogMessage
}
$Logfile = "C:\windows\fontinstall.log"
$SourceFolder = "\\resource.loc\SYSVOL\resource.loc\scripts\Fonts"
Add-Type -AssemblyName System.Drawing
$WindowsFonts = [System.Drawing.Text.PrivateFontCollection]::new()
Get-ChildItem -Path $SourceFolder -Include *.ttf, *.otf -Recurse -File |
Copy-Item -Destination "$env:SystemRoot\Fonts" -Force -Confirm:$false -PassThru |
ForEach-Object {
WriteLog "Installing font file $_.Name"
$WindowsFonts.AddFontFile($_.fullname)
$RegistryValue = @{
Path = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts'
Name = $WindowsFonts.Families[-1].Name
Value = $_.Fullname
}
$RemoveRegistry = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
Remove-ItemProperty -name $($WindowsFonts.Families[-1].Name) -path $RemoveRegistry
New-ItemProperty @RegistryValue
}
Сохраните данный PowerShell скрипт в PS1 файл и запускайте как логон скрипт через GPO.
В результате все файлы шрифтов из указанной папки будут установлены в Windows, а в лог файл попадет информацию о времени установки шрифта.