powershell安装字体
参考 Install-Fonts (powershellweekly.com) 从命令行获取TTF文件的实际字体名称。 windows command-line cmd.exe fonts - Dev59
使用 -File 开关 Install-Fonts -File “c:\Fonts\FontName.ttf”选择一个文件
使用 -Files 开关安装字体 -Files “c:\Fonts” 选择整个文件夹。
<# .Synopsis Install-Fonts Author: Michael J. Thomas Created: 07/10/2019 Updated: 07/10/2019 .DESCRIPTION Install Fonts on a computer. .EXAMPLE Install-Fonts -Files "C:\Fonts" .EXAMPLE Install-Fonts -File "C:\Fonts\LeanStatus.ttf" #> function Install-Fonts { [CmdletBinding()] Param ( [string[]]$Files, [string]$File ) $objShell = New-Object -ComObject Shell.Application $Fonts = $objShell.NameSpace(20) If (!($Files -eq $null)){ Get-ChildItem "$Files\*.ttf" | ForEach-Object {$Fonts.CopyHere($_.FullName)} } ElseIf (!($File -eq $null)){ $Fonts.CopyHere($File) } }
这个是为当前用户安装,如果要给所有用户安装, 参考 使用 PowerShell | 安装字体烷烃 (alkanesolutions.co.uk)
本质是
将字体复制到:
并在其中注册一个条目:
以下实测正常,遍历当前文件夹内所有字体文件并添加
function Install-Font {
param
(
[System.IO.FileInfo]$fontFile
)
try {
#添加程序集
Add-Type -AssemblyName PresentationCore
# $gt = [Windows.Media.GlyphTypeface]::new($fontFile.FullName) 作废
#get font name 获取字体名称
$gt = New-Object -TypeName Windows.Media.GlyphTypeface -ArgumentList $fontFile.FullName
$family = $gt.Win32FamilyNames['zh-CN']
if ($null -eq $family) { $family = $gt.Win32FamilyNames.Values.Item(0) }
$face = $gt.Win32FaceNames['zh-CN']
if ($null -eq $face) { $face = $gt.Win32FaceNames.Values.Item(0) }
$fontName = ("$family $face").Trim()
switch ($fontFile.Extension) {
".ttf" {$fontName = "$fontName (TrueType)"}
".otf" {$fontName = "$fontName (OpenType)"}
}
write-host "Installing font: $fontFile with font name '$fontName'"
If (!(Test-Path ("$($env:windir)\Fonts\" + $fontFile.Name))) {
write-host "Copying font: $fontFile"
Copy-Item -Path $fontFile.FullName -Destination ("$($env:windir)\Fonts\" + $fontFile.Name) -Force
}
else { write-host "Font already exists: $fontFile" }
If (!(Get-ItemProperty -Name $fontName -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts" -ErrorAction SilentlyContinue)) {
write-host "Registering font: $fontFile"
New-ItemProperty -Name $fontName -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts" -PropertyType string -Value $fontFile.Name -Force -ErrorAction SilentlyContinue | Out-Null
}
else { write-host -ForegroundColor:Green "Font already registered: $fontFile" }
}
catch {
write-host "Error installing font: $fontFile. " $_.exception.message
}
}
function Uninstall-Font {
param
(
[System.IO.FileInfo]$fontFile
)
try {
#get font name 获取字体名称
Add-Type -AssemblyName PresentationCore
$gt = New-Object -TypeName Windows.Media.GlyphTypeface -ArgumentList $fontFile.FullNam
$family = $gt.Win32FamilyNames['zh-CN']
if ($null -eq $family) { $family = $gt.Win32FamilyNames.Values.Item(0) }
$face = $gt.Win32FaceNames['zh-CN']
if ($null -eq $face) { $face = $gt.Win32FaceNames.Values.Item(0) }
$fontName = ("$family $face").Trim()
switch ($fontFile.Extension) {
".ttf" {$fontName = "$fontName (TrueType)"}
".otf" {$fontName = "$fontName (OpenType)"}
}
write-host "Uninstalling font: $fontFile with font name '$fontName'"
If (Test-Path ("$($env:windir)\Fonts\" + $fontFile.Name)) {
write-host "Removing font: $fontFile"
Remove-Item -Path "$($env:windir)\Fonts\$($fontFile.Name)" -Force
}
else { write-host "Font does not exist: $fontFile" }
If (Get-ItemProperty -Name $fontName -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts" -ErrorAction SilentlyContinue) {
write-host "Unregistering font: $fontFile"
Remove-ItemProperty -Name $fontName -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts" -Force
}
else { write-host "Font not registered: $fontFile" }
}
catch {
write-host "Error uninstalling font: $fontFile. " $_.exception.message
}
}
#Loop through fonts in the same directory as the script and install/uninstall them 遍历当前文件夹内所有字体文件并安装
foreach ( $FontItem in ( ls -Recurse | Where-Object {($_.Name -like '*.ttf') -or ($_.Name -like '*.otf')} ) )
{
Install-Font -fontFile $FontItem.FullName
}
作废
以下作废
function Install-Font { param ( [System.IO.FileInfo]$fontFile ) try { #get font name $gt = [Windows.Media.GlyphTypeface]::new($fontFile.FullName) $family = $gt.Win32FamilyNames['en-us'] if ($null -eq $family) { $family = $gt.Win32FamilyNames.Values.Item(0) } $face = $gt.Win32FaceNames['en-us'] if ($null -eq $face) { $face = $gt.Win32FaceNames.Values.Item(0) } $fontName = ("$family $face").Trim() switch ($fontFile.Extension) { ".ttf" {$fontName = "$fontName (TrueType)"} ".otf" {$fontName = "$fontName (OpenType)"} } write-host "Installing font: $fontFile with font name '$fontName'" If (!(Test-Path ("$($env:windir)\Fonts\" + $fontFile.Name))) { write-host "Copying font: $fontFile" Copy-Item -Path $fontFile.FullName -Destination ("$($env:windir)\Fonts\" + $fontFile.Name) -Force } else { write-host "Font already exists: $fontFile" } If (!(Get-ItemProperty -Name $fontName -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts" -ErrorAction SilentlyContinue)) { write-host "Registering font: $fontFile" New-ItemProperty -Name $fontName -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts" -PropertyType string -Value $fontFile.Name -Force -ErrorAction SilentlyContinue | Out-Null } else { write-host "Font already registered: $fontFile" } [System.Runtime.Interopservices.Marshal]::ReleaseComObject($oShell) | out-null Remove-Variable oShell } catch { write-host "Error installing font: $fontFile. " $_.exception.message } } function Uninstall-Font { param ( [System.IO.FileInfo]$fontFile ) try { #get font name $gt = [Windows.Media.GlyphTypeface]::new($fontFile.FullName) $family = $gt.Win32FamilyNames['en-us'] if ($null -eq $family) { $family = $gt.Win32FamilyNames.Values.Item(0) } $face = $gt.Win32FaceNames['en-us'] if ($null -eq $face) { $face = $gt.Win32FaceNames.Values.Item(0) } $fontName = ("$family $face").Trim() switch ($fontFile.Extension) { ".ttf" {$fontName = "$fontName (TrueType)"} ".otf" {$fontName = "$fontName (OpenType)"} } write-host "Uninstalling font: $fontFile with font name '$fontName'" If (Test-Path ("$($env:windir)\Fonts\" + $fontFile.Name)) { write-host "Removing font: $fontFile" Remove-Item -Path "$($env:windir)\Fonts\$($fontFile.Name)" -Force } else { write-host "Font does not exist: $fontFile" } If (Get-ItemProperty -Name $fontName -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts" -ErrorAction SilentlyContinue) { write-host "Unregistering font: $fontFile" Remove-ItemProperty -Name $fontName -Path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts" -Force } else { write-host "Font not registered: $fontFile" } [System.Runtime.Interopservices.Marshal]::ReleaseComObject($oShell) | out-null Remove-Variable oShell } catch { write-host "Error uninstalling font: $fontFile. " $_.exception.message } } $currentDirectory = [System.AppDomain]::CurrentDomain.BaseDirectory.TrimEnd('\') if ($currentDirectory -eq $PSHOME.TrimEnd('\')) { $currentDirectory = $PSScriptRoot } #Loop through fonts in the same directory as the script and install/uninstall them foreach ($FontItem in (Get-ChildItem -Path $currentDirectory | Where-Object {($_.Name -like '*.ttf') -or ($_.Name -like '*.otf') })) { Install-Font -fontFile $FontItem.FullName }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2021-01-11 windev 学习补丁