Created
November 30, 2020 16:48
-
-
Save robe007/19acc633774a15415c26854f0c05b5d4 to your computer and use it in GitHub Desktop.
Install a list of fonts automatically in Windows
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<# | |
.SYNOPSIS | |
Installs the provided fonts. | |
.DESCRIPTION | |
Installs all the provided fonts by default. The FontName | |
parameter can be used to pick a subset of fonts to install. | |
.EXAMPLE | |
C:\PS> ./install_fonts.ps1 | |
Installs all the fonts located in the Git repository. | |
.EXAMPLE | |
C:\PS> ./install_fonts.ps1 furamono-, hack-* | |
Installs all the FuraMono and Hack fonts. | |
.EXAMPLE | |
C:\PS> ./install_fonts.ps1 d* -WhatIf | |
Shows which fonts would be installed without actually installing the fonts. | |
Remove the "-WhatIf" to install the fonts. | |
#> | |
[CmdletBinding(SupportsShouldProcess)] | |
param( | |
# Specifies the font name to install. Default value will install all fonts. | |
[Parameter(Position=0)] | |
[string[]] | |
$FontName = '*' | |
) | |
$fontFiles = New-Object 'System.Collections.Generic.List[System.IO.FileInfo]' | |
foreach ($aFontName in $FontName) { | |
Get-ChildItem $PSScriptRoot -Filter "${aFontName}.ttf" -Recurse | Foreach-Object {$fontFiles.Add($_)} | |
Get-ChildItem $PSScriptRoot -Filter "${aFontName}.otf" -Recurse | Foreach-Object {$fontFiles.Add($_)} | |
} | |
$fonts = $null | |
foreach ($fontFile in $fontFiles) { | |
if ($PSCmdlet.ShouldProcess($fontFile.Name, "Install Font")) { | |
if (!$fonts) { | |
$shellApp = New-Object -ComObject shell.application | |
$fonts = $shellApp.NameSpace(0x14) | |
} | |
$fonts.CopyHere($fontFile.FullName) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The Default Execution Policy is set to restricted, you can see it by running Get-ExecutionPolicy:
Get-ExecutionPolicy
Run Set-ExecutionPolicy like this to switch to the unrestricted mode:
Set-ExecutionPolicy unrestricted