Schriftarten mit Intune installieren
- Florian Salzmann
- Veröffentlicht am 22 Feb, 2022
- Aktualisiert am 09 Jul, 2023
- 03 Mins read
- Microsoft Intune,PowerShell,Windows 10,Windows 11
In Windows 10 und 11 sind viele Schriftarten bereits vorhanden. Oft hat eine Firma aber eine eigene Schriftart, welche für die Einhaltung von CI/CD auf allen Geräten benötigt wird. Dies kann z.B. “Open Sans” die “Deutschschweizer Basisschrift” oder eine andere Schriftart sein. In solchen Fällen nutze ich zum Installieren / Verteilen der Schriftarten via Intune ein PowerShell Script innerhalb eines Win32 Paketes.
Download from GitHub (Fonts.zip)
Win32 für Schriftarten
Das Win32 Packet baue ich wie die meisten meiner Pakete nach derselben Logik auf. Dies habe ich zuvor im Beitrag “my take on win32 apps - Intune” beschrieben.
In diesem Beispiel installiere ich die Schriftart Open Sans von Google, welche in vielen Webseiten zum Einsatz kommt. Zum Installieren weiterer Schriftarten via Intune musst du diese übrigens nur in den Ordner “Fonts” im Paket legen und das intunewin neu generieren.
Installation von Schriftarten
Um die Schriftart auf einem Endgerät zu installieren, müssen wir diese einerseits ins Verzeichnis “C:\Windows\Fonts” kopieren und zusätzlich in der Windows Registry unter “HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts” registrieren.
Da die meisten Schriftarten aus mehreren TTF oder OTF Dateien bestehen, habe ich das Paket so aufgebaut, dass du diese im Unterverzeichnis Fonts ablegen kannst. Pro TTF und/oder OTF Datei innerhalb dieses Ordners wird dann automatisch der Kopiervorgang inklusive Registry Key Erstellung durchgeführt.
Um das gleiche Paket mit allenfalls einem erweiterten Schriftsatz erneut installieren zu können, hinterlege ich im Validierungsfile übrigens eine Version.
$PackageName = "Company-Fonts"
$Version = "1"
$Path_local = "$Env:Programfiles\_MEM"
Start-Transcript -Path "$env:ProgramData\Microsoft\IntuneManagementExtension\Logs\$PackageName-install.log" -Force
try{
$WorkingPath = "$Path_local\Data\Fonts"
New-Item -ItemType "directory" -Path $WorkingPath -Force
Copy-Item -Path ".\Fonts\*" -Destination $WorkingPath -Recurse
$AllFonts = @()
$AllFonts += Get-ChildItem -Path "$WorkingPath\*.ttf"
$AllFonts += Get-ChildItem -Path "$WorkingPath\*.otf"
foreach($FontFile in $AllFonts){
try{
Copy-Item -Path "$WorkingPath\$($FontFile.Name)" -Destination "$env:windir\Fonts" -Force -PassThru -ErrorAction Stop
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" -Name $FontFile.Name -PropertyType String -Value $FontFile.Name -Force
}catch{
Write-Error $_
}
}
Remove-Item $WorkingPath -Force -Recurse
New-Item -Path "$Path_local\Validation\$PackageName" -ItemType "file" -Force -Value $Version
}catch{
Write-Host "_____________________________________________________________________"
Write-Host "ERROR"
Write-Host "$_"
Write-Host "_____________________________________________________________________"
exit 1618
}
Stop-Transcript
Deinstallation von Schriftarten
Bei der Deinstallation verwende ich im Grunde dieselbe Logik wie bei der Installation, einfach, dass hier im Gegensatz zu einem Kopiervorgang und der Registry Erstellung ein Löschvorgang ausgeführt wird. Ebenfalls lösche ich das Validierungsfile.
$PackageName = "Company-Fonts"
$Path_local = "$Env:Programfiles\_MEM"
Start-Transcript -Path "$env:ProgramData\Microsoft\IntuneManagementExtension\Logs\$PackageName-uninstall.log" -Force
$WorkingPath = "$Path_local\Data\Fonts"
New-Item -ItemType "directory" -Path $WorkingPath -Force
Copy-Item -Path ".\Fonts\*" -Destination $WorkingPath -Recurse
$AllFonts = Get-ChildItem -Path "$WorkingPath\*.ttf"
$AllFonts += Get-ChildItem -Path "$WorkingPath\*.otf"
foreach($FontFile in $AllFonts){
try{
Remove-Item -Path "$WorkingPath\$($FontFile.Name)" -Force
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" -Name $FontFile.Name -Force
}catch{
Write-Host $_
}
}
Remove-Item $WorkingPath -Force -Recurse
Remove-Item -Path "$Path_local\Validation\$PackageName" -ItemType "file" -Force -Value $Version
Stop-Transcript
Erkennungsregel
Die Erkennungsregel ist sehr simpel und überprüft, ob das Validierungsfile mit der entsprechenden Zielversion als Inhalt vorhanden ist. Ist dies der Fall, wird “Found it!” ausgegeben und der Endpoint Manager beziehungsweise Intune weiss, dass da Paket auf dem Endgerät vorhanden ist.
$PackageName = "Company-Fonts"
$Version = "1"
$Path_local = "$Env:Programfiles\_MEM"
$ProgramVersion_current = Get-Content -Path "$Path_local\Validation\$PackageName"
if($ProgramVersion_current -eq $Version){
Write-Host "Found it!"
}
Win32 Packet erstellen und verteilen
Mit dem Intune Win32 Prep Tool wird das Paket, nachdem das CSV und oder der Desktop Ordner abgefüllt ist erstellt:
Anschliessend erstellen wir ein “Windows app (Win32)” und laden die erstellte Datei «install.intunewin» im MEM/Intune mit den entsprechenden Parametern hoch. (rot zwingend, orange optional, aber hilfreich, wenn das Unternehmensportal genutzt wird.)
| Name | Fonts oder individueller Name |
| Beschreibung | Hinweis zu den Schriftarten |
| Herausgeber | individuell |
| Icon | frei wählbar, erscheint im Unternehmensportal |
| Installations-Befehl | %SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -command .\install.ps1 |
| Deinstallations-Befehl | %SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -command .\uninstall.ps1 |
| Anforderungen | x64 und 2004 (Windows Version nicht relevant) |
| Erkennungsregel | custom script, check.ps1 |
| Abhängigkeit | keine |
| Zuweisung | je nach Anforderung |
Nun hast du das Paket erstellt im Endpoint Manager hochgeladen und kannst es an die gewünschten Geräte verteilen. Vergiss bei einer Anpassung am Paket nicht, die Version sowohl im “install.ps1” als auch im “check.ps1” anzupassen.






