ในบทความนี้ เราจะแสดงวิธีการติดตั้งฟอนต์เพิ่มเติมบนคอมพิวเตอร์ในโดเมน Active Directory โดยใช้ Group Policy และสคริปต์ PowerShell คู่มือนี้ได้รับการทดสอบบน Windows 10 20H2 และ Windows Server 2016/2019 แล้ว
เนื้อหา
การปรับใช้ฟอนต์ใหม่ผ่าน GPO
หากคุณต้องการติดตั้งฟอนต์เพียงหนึ่งหรือสองตัว สามารถทำได้ผ่าน Group Policy โดยการคัดลอกไฟล์ *.ttf ไปที่ %WindowsDir%\Fonts\ บนคอมพิวเตอร์ไคลเอ็นต์ และเพิ่มข้อมูลฟอนต์ใหม่ลงในคีย์รีจิสทรี HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
- คัดลอกไฟล์ฟอนต์ TTF ไปยังโฟลเดอร์เครือข่ายที่แชร์บนไฟล์เซิร์ฟเวอร์ (หากมีเพียงไม่กี่ตัว สามารถเก็บไว้ในโฟลเดอร์ SYSVOL บนโดเมนคอนโทรลเลอร์ได้)
- เปิดคอนโซลจัดการ Group Policy ของโดเมน (
gpmc.msc) สร้างนโยบายใหม่ชื่อ GPO_InstallFonts และเชื่อมโยงกับ OU ที่มีคอมพิวเตอร์ - แก้ไขนโยบาย
- สร้างกฎใหม่ใน Group Policy Preferences เพื่อคัดลอกไฟล์ฟอนต์จากโฟลเดอร์ที่แชร์ไปที่
%WindowsDir%\Fonts\บนอุปกรณ์ไคลเอ็นต์ เราเคยแสดงวิธีคัดลอกไฟล์ไปยังคอมพิวเตอร์ด้วย GPO ไปแล้ว สร้างนโยบายกลุ่มตามคำแนะนำเหล่านี้ ไปที่ Computer Configuration → Preferences → Windows Settings → Files สร้างรายการนโยบายด้วยพารามิเตอร์ดังนี้:
Source:\\woshub.com\SYSVOL\woshub.com\scripts\Fonts\Roboto-Black.ttf
Destination:%WindowsDir%\Fonts\Roboto-Black.ttf - เพิ่มข้อมูลฟอนต์ใหม่ลงในรีจิสทรี สามารถใช้ 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
จากนั้นอัปเดตการตั้งค่า GPO บนคอมพิวเตอร์ไคลเอ็นต์ และตรวจสอบว่าไฟล์ฟอนต์ใหม่ถูกติดตั้งแล้ว ใน Windows 10 สามารถดูรายการฟอนต์ที่ติดตั้งได้ที่ Settings → Personalization → Fonts
หากไฟล์ฟอนต์ยังไม่ได้ติดตั้ง ให้ตรวจสอบว่านโยบายถูกมอบหมายให้คอมพิวเตอร์โดยใช้เครื่องมือ gpresult จากนั้นทำตามขั้นตอนการแก้ไขปัญหาการใช้ GPO ตามปกติ
ติดตั้งฟอนต์ Windows ด้วยสคริปต์ PowerShell Logon
วิธีการติดตั้งฟอนต์ผ่าน 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\posh_font_install.log"
$SourceFolder = "\\woshub.com\SYSVOL\woshub.com\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 และรันเป็นสคริปต์ Logon ผ่าน GPO
ดังนั้น ไฟล์ฟอนต์ทั้งหมดจากโฟลเดอร์ที่ระบุจะถูกติดตั้งใน Windows และวันที่เวลาการติดตั้งจะถูกบันทึกล็อก
หากต้องการลบฟอนต์เพิ่มเติมทั้งหมดใน Windows และคืนค่าเป็นค่าเริ่มต้น โปรดทำตามคู่มือนี้