84 строки
2.9 KiB
PowerShell
84 строки
2.9 KiB
PowerShell
$fontsFolderPath = "C:\Windows\Fonts"
|
|
$ExistingFonts = Get-ChildItem -Path $fontsFolderPath | % { $_.Name }
|
|
|
|
#*******************************************************************
|
|
# Load C# code
|
|
#*******************************************************************
|
|
$fontCSharpCode = @'
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.IO;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace FontResource
|
|
{
|
|
public class AddRemoveFonts
|
|
{
|
|
[DllImport("gdi32.dll")]
|
|
static extern int AddFontResource(string lpFilename);
|
|
|
|
public static int AddFont(string fontFilePath) {
|
|
try
|
|
{
|
|
return AddFontResource(fontFilePath);
|
|
}
|
|
catch
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
'@
|
|
|
|
Add-Type $fontCSharpCode
|
|
|
|
# Create hashtable containing valid font file extensions and text to append to Registry entry name.
|
|
$hashFontFileTypes = @{}
|
|
$hashFontFileTypes.Add(".fon", "")
|
|
$hashFontFileTypes.Add(".fnt", "")
|
|
$hashFontFileTypes.Add(".ttf", " (TrueType)")
|
|
$hashFontFileTypes.Add(".ttc", " (TrueType)")
|
|
$hashFontFileTypes.Add(".otf", " (OpenType)")
|
|
$fontRegistryPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
|
|
|
|
Get-ChildItem $PSScriptRoot -ErrorAction Ignore | % {
|
|
if ($hashFontFileTypes.ContainsKey($_.Extension)) {
|
|
$path = Join-Path "c:\Windows\Fonts" $_.Name
|
|
if ($ExistingFonts.Contains($_.Name)) {
|
|
Write-Host "Skipping font '$path' as it is already installed"
|
|
}
|
|
else {
|
|
Write-Host "Installing font '$path' " -NoNewline
|
|
try {
|
|
Copy-Item -Path $_.FullName -Destination $path
|
|
|
|
$fileDir = split-path $path
|
|
$fileName = split-path $path -leaf
|
|
$fileExt = (Get-Item $path).extension
|
|
$fileBaseName = $fileName -replace($fileExt ,"")
|
|
|
|
$shell = new-object -com shell.application
|
|
$myFolder = $shell.Namespace($fileDir)
|
|
$fileobj = $myFolder.Items().Item($fileName)
|
|
$fontName = $myFolder.GetDetailsOf($fileobj,21)
|
|
|
|
if ($fontName -eq "") { $fontName = $fileBaseName }
|
|
|
|
$retVal = [FontResource.AddRemoveFonts]::AddFont($path)
|
|
|
|
if ($retVal -eq 0) {
|
|
Write-Host -ForegroundColor Red "failed"
|
|
} else {
|
|
Set-ItemProperty -path "$($fontRegistryPath)" -name "$($fontName)$($hashFontFileTypes.item($fileExt))" -value "$($fileName)" -type STRING
|
|
Write-Host -ForegroundColor Green "succeeded"
|
|
}
|
|
}
|
|
catch {
|
|
Write-Host -ForegroundColor Red "exception: $($_.Exception.Message)"
|
|
}
|
|
}
|
|
}
|
|
}
|