Tag Archive fonts

Byphunsanit

PowerShell: ติดตั้งฟอนต์ใน windows

PowerShell ที่ช่วยในการติดตั้ง ฟอนต์แห่งชาติ (13 ตัวดั้งเดิม + ปรับปรุง) หรือฟอนต์ อื่น ๆ ที่อยู่ในรายชื่อให้ windows โดยอัตโนมัติ หรือจะใส่ fonts ใน folder fonts ไว้ก็ได้ เพื่อติดตั้งในหลาย ๆ เครื่องได้ง่าย ๆโดยจะโหลดมาจาก Google Fonts
install_fonts_from_google_fonts.ps1

<#
.SYNOPSIS
    Download and Install Google Fonts
    - Auto-elevates to Administrator
    - Options: Cache to USB, Fixed Path, or No Cache (Temp & Delete)
    Author: pitt phunsanit (pitt.plusmagi.com)
#>

# --- 0. ADMIN CHECK ---
# Check for Administrator privileges. If not, restart the script as Administrator.
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
    exit
}

# --- 1. SETUP PATHS & MENU ---
# Detect Script Location (Equivalent to USB Path or current file location)
$scriptPath = $PSScriptRoot
if (-not $scriptPath) { $scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Definition }

$usbFontsPath = Join-Path -Path $scriptPath -ChildPath "Fonts"
$cFontsPath = "C:\portables\Fonts"

Clear-Host
$title = @"
====================================================
       GOOGLE FONTS INSTALLER UTILITY
       Author: pitt phunsanit (pitt.plusmagi.com)
====================================================
"@
Write-Host $title -ForegroundColor Cyan

# Menu Selection
Write-Host "Select Download/Cache Destination:" -ForegroundColor White
Write-Host "[1] Current Location : $usbFontsPath" -ForegroundColor Yellow
Write-Host "[2] System C:        : $cFontsPath" -ForegroundColor Gray
Write-Host "[3] No Cache         : (Temp & Delete)" -ForegroundColor Magenta
$choice = Read-Host "`nSelect [1], [2] or [3] (Default is 1)"

# Initialize Cleanup Flag
$shouldCleanup = $false

# Set Cache Directory based on choice
if ($choice -eq "2") {
    $cacheDir = $cFontsPath
}
elseif ($choice -eq "3") {
    # Create a random temp folder
    $cacheDir = Join-Path $env:TEMP "GoogleFontsInstaller_$(Get-Random)"
    $shouldCleanup = $true
}
else {
    $cacheDir = $usbFontsPath
}

# --- 2. CONFIGURATION ---
# List of desired fonts
$fontList = @(
    "Bai+Jamjuree",
    "Chakra+Petch",
    "Charm",
    "Charmonman",
    "Fah+Kwang",
    "K2D",
    "Kodchasan",
    "KoHo",
    "Krub",
    "Maitree",
    "Mali",
    "Niramit",
    "Sarabun",
    "Srisakdi",
    "Taviraj",
    "Thasadith"
)

# --- 3. START PROCESS ---

# Check and create Cache folder if it doesn't exist
if (-not (Test-Path $cacheDir)) {
    New-Item -Path $cacheDir -ItemType Directory | Out-Null
    Write-Host "`nCreated working folder at: $cacheDir" -ForegroundColor Cyan
} else {
    Write-Host "`nUsing working folder at: $cacheDir" -ForegroundColor Cyan
}

# Download Process
foreach ($font in $fontList) {
    $url = "https://fonts.google.com/download?family=$font"
    $zipPath = Join-Path $cacheDir "$font.zip"

    # Check Cache: Skip download if zip file exists
    if (Test-Path $zipPath) {
        Write-Host "[$font] Found in cache. Skipping download." -ForegroundColor Gray
    }
    else {
        Write-Host "[$font] Downloading..." -ForegroundColor Yellow
        try {
            Invoke-WebRequest -Uri $url -OutFile $zipPath -UseBasicParsing
            Write-Host "[$font] Download completed." -ForegroundColor Green
        }
        catch {
            Write-Host "[$font] Error downloading: $_" -ForegroundColor Red
            continue
        }
    }

    # Extract File
    try {
        Expand-Archive -Path $zipPath -DestinationPath $cacheDir -Force -ErrorAction SilentlyContinue
    }
    catch {
         Write-Host "[$font] Error extracting." -ForegroundColor Red
    }
}

# --- 4. INSTALLATION ---
Write-Host "`nStarting Installation..." -ForegroundColor Cyan

$shell = New-Object -ComObject Shell.Application
$windowsFonts = $shell.Namespace(0x14) # 0x14 = Windows Fonts folder
$fontFiles = Get-ChildItem -Path $cacheDir -Recurse -Include *.ttf, *.otf, *.ttc

foreach ($file in $fontFiles) {
    $fontName = $file.Name
    # Check if the font is already installed in Windows
    if (Test-Path "C:\Windows\Fonts\$fontName") {
        Write-Host "Skipping $fontName (Already installed)" -ForegroundColor DarkGray
    } else {
        Write-Host "Installing $fontName ..." -ForegroundColor Yellow
        try {
            $windowsFonts.CopyHere($file.FullName)
        } catch {
            Write-Host "Failed to install $fontName" -ForegroundColor Red
        }
    }
}

# --- FINISH ---
Write-Host "`n------------------------------------------------"

# Clean up if "No Cache" was selected
if ($shouldCleanup) {
    Write-Host " Cleaning up temporary files..." -ForegroundColor Magenta
    try {
        Remove-Item -Path $cacheDir -Recurse -Force -ErrorAction SilentlyContinue
        Write-Host " Temp folder deleted." -ForegroundColor Green
    } catch {
        Write-Host " Could not delete temp folder. You may delete it manually at: $cacheDir" -ForegroundColor Red
    }
} else {
    Write-Host " Fonts stored at: $cacheDir" -ForegroundColor Cyan
}

Write-Host " Process Completed!" -ForegroundColor Green
Write-Host "------------------------------------------------"

Start-Sleep -Seconds 3

  1. สร้างไฟล์ install_fonts_from_google_fonts.ps1 โดยใช้ notepad แล้ว save as เป็น install_fonts_from_google_fonts.ps1 บน Desktop หรือจะใส่ใน USB เลยก็ได้
  2. ใส่เนื้อหาตามที่เห็นด้านบน
  3. ถ้าต้องการเปลี่ยน fonts ก็ให้เปลี่ยนแปลงใน $fontList
  4. บันทึกไฟล์

การใช้งาน

  1. ไปที่เมนูของ windows ช่องค้นหา พิมพ์ powershell
  2. พิมพ์ cd ตามด้วย folder ที่ save install_fonts_from_google_fonts.ps1 ไว้อย่าง
    cd /d %USERPROFILE%/Desktop
  3. ใช้โดยพิมพ์ ./install_fonts_from_google_fonts.ps1
  4. ทำตามขั้นตอนไปเรื่อย ๆ

อ่านเพิ่มเติม