Use the Install-Font function to install system fonts on Windows 10 1809 and above. Older scripts may not work with Windows 10 1809 and above since Windows will now try to install fonts in the user’s LOCALAPPDATA directory. This function will get around those issues and allow you to programmatically install fonts for all users again.
How to use the function:
Install Fonts from folder
Install-Font “C:\Temp\Helvetica Neue”
Install one font
Install-Font “C:\Temp\Helvetica Neue\HelveticaNeueLTStd-HvIt.otf”
Function Install-Font { <# .SYNOPSIS Install system fonts for all users .PARAMETER FontPath Provide path to a font or a folder containing fonts .PARAMETER Recurse Scan subdirectories .EXAMPLE - Install Fonts from folder Install-Font "C:\Temp\Helvetica Neue" .EXAMPLE - Install one font Install-Font "C:\Temp\Helvetica Neue\HelveticaNeueLTStd-HvIt.otf" #> [CmdletBinding()] Param( [Parameter(Mandatory=$true)] [String]$FontPath, [Switch]$Recurse ) If(Test-Path $FontPath) { $FontFile = Get-Item -Path $FontPath If($FontFile -is [System.IO.DirectoryInfo]) { If($Recurse) { $Fonts = Get-ChildItem -Path $FontFile -Include ('*.fon','*.otf','*.ttc','*.ttf') -Recurse } Else { $Fonts = Get-ChildItem -Path "$FontFile\*" -Include ('*.fon','*.otf','*.ttc','*.ttf') } If(!$Fonts) { Throw ("Unable to find any fonts in the folder") } } ElseIf($FontFile -is [IO.FileInfo]) { If ($FontFile.Extension -notin ('.fon','.otf','.ttc','.ttf')) { Throw ("The file provided does not appear to be a valid font") } $Fonts = $FontFile } Else { Throw ("Expected font or folder") } } Else { Throw [System.IO.FileNotFoundException]::New("Could not find path: $FontPath") } ForEach ($Font in $Fonts) { $FontName = $Font.Basename Write-Host "Installing font: $FontName" Copy-Item $Font "C:\Windows\Fonts" -Force New-ItemProperty -Name $FontName -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts" -PropertyType String -Value $Font.Name -Force | Out-Null } }