- PowerShell的 允许您为系统和特定用户安装字体。
- 脚本可以与 AddFontResource 和注册表一起使用以实现持久安装。
- 有一些现代的替代方案,例如安装 Nerd Fonts 的字体来定制 终端.
- 无需管理员即可自动执行大规模安装过程。
您是否遇到过需要在系统上安装数十种字体的情况? Windows 你不想一个一个地做吗? 或者您想自动化从一台机器部署到多台机器的过程 脚本 或部署?PowerShell,强大的 Windows 管理控制台,可以帮助您做到这一点,无论您是否是管理员。
在本文中,我们将教您如何使用 PowerShell 安装字体涵盖了从最基本的操作(例如将文件复制到 Fonts 文件夹)到编辑 Windows 注册表以将字体注册为已安装字体的所有内容。我们还将探讨如何批量自动执行此任务,如果您没有管理员权限该怎么办,以及如何使用 Oh My Posh 和 Fonts Nerd 等工具自定义 PowerShell。
从 PowerShell 安装字体之前您需要了解什么?
Windows 使用两种主要机制管理已安装的字体: 文件系统,通过 %windir%\Fonts 文件夹和 Windows 注册表,其中维护一个索引,允许系统检测和加载字体。
为了使字体能够被系统正确识别,仅仅将其复制到 Fonts 文件夹是不够的;它还需要在注册表中注册。有一些专门用于此任务的函数,例如 AddFontResource
y AddFontResourceEx
.
使用 PowerShell 临时安装字体
如果您只需要在当前会话期间有一个可用的源,你可以暂时使用 AddFontResource
。需要注意的是,系统重启后它将被删除:
public static extern int AddFontResource(string lpszFilename);
$fuente = "C:\ruta\a\tu\fuente.ttf"
AddFontResource $fuente
此方法仅在会话处于活动状态时有效。如果您希望字体在系统重启后仍然安装,则需要执行持久安装。
使用 PowerShell 永久安装字体
对于持久安装,您需要将源复制到特定文件夹 系统(%windir%\Fonts)然后在注册表中注册其名称。
$fuente = "C:\ruta\a\tu\fuente.ttf"
$nombreFuente = "NombreFuente (TrueType)"
$destino = "$env:windir\Fonts\$(Split-Path $fuente -Leaf)"
Copy-Item $fuente -Destination $destino
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" -Name $nombreFuente -PropertyType String -Value $(Split-Path $fuente -Leaf) -Force
::WriteInt32(::Zero, 0)
::WriteInt32(::Zero, 0)
注册字体后,建议向系统发送更改消息 让应用程序无需重新启动即可识别新字体:
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
$WM_FONTCHANGE = 0x001D
$HWND_BROADCAST = 0xffff
SendMessage $HWND_BROADCAST $WM_FONTCHANGE ::Zero ::Zero
从文件夹自动批量安装字体
当您需要安装多种字体时,逐一安装是不可行的。另一种方法是使用自动检测和处理文件夹及其子文件夹中的每个文件的脚本,例如 .bat 脚本。
PowerShell 中一个经典且仍然有效的方法是使用一个脚本遍历所有 .ttf 和 .otf 文件,复制它们并注册它们:
Get-ChildItem "C:\Fuentes" -Recurse -Include *.ttf, *.otf | ForEach-Object {
$archivo = $_.FullName
$nombre = $_.BaseName + " (TrueType)"
$destino = "$env:windir\Fonts\$($_.Name)"
Copy-Item $archivo -Destination $destino
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" -Name $nombre -PropertyType String -Value $_.Name -Force
}
为了使这一切正常工作,PowerShell 必须以管理员权限运行。否则,它将无法访问系统注册表或字体文件夹。
无需管理员权限即可安装字体
在您没有管理员权限的环境中,仍然可以为当前用户本地安装字体。微软自 Windows 10 起通过“仅为我安装”选项允许此功能。
此外,您可以使用环境变量 $env:LOCALAPPDATA
将字体复制到用户的 Fonts 子文件夹。虽然并非所有应用都支持这些字体,但它们在大多数较新的应用中都能正常使用。
一些工具如 注册表字体 允许您从网上注册来源 comandos 即使没有提升权限: 有关管理 Office 中的加载项的详细信息.
这种方法使得在锁定或策略限制的环境中安装更容易。,例如学校或企业。
使用 Oh My Posh 和 Nerd 字体自定义 PowerShell
一种日益增长的趋势是使用更引人注目、更实用的视觉风格来定制 PowerShell 控制台。Oh My Posh 工具允许您将主题应用到您的提示,并且需要特殊字体:Nerd Fonts。
这些字体包含实用的图标和字形,可使提示更具信息性。为此,您需要安装以下字体: MesloLGM Nerd字体,针对所有用户或仅针对当前用户。
从 PowerShell 安装 Nerd 字体
如果你有 WinGet
配置好之后,直接安装字体就可以了: 智能电视上安装Kodi的指南
winget install --id=Ryanoasis.NerdFonts.Meslo --scope=user
接下来,您需要配置终端或 Visual Studio Code,以使用新字体作为默认字体。操作如下:
- 打开 Windows 终端设置 (Ctrl + ,)
- 编辑文件
settings.json
- 添加属性
"font.face": "MesloLGM Nerd Font"
在所需的配置文件内
编辑 PowerShell 配置文件以应用主题
PowerShell 允许您配置每次打开控制台时运行的配置文件。要应用 Oh My Posh 主题,您必须编辑变量指示的文件 $PROFILE
并添加如下指令:
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\zash.omp.json" | Invoke-Expression
每次启动 PowerShell 时,这将自动应用您喜欢的主题。
解决 PowerShell 中的字符显示错误
在一些使用中文、日语或韩语等语言的系统中,PowerShell 控制台可能无法正确显示字符。此问题通常与默认字体有关。
一种解决方案是手动将 PowerShell 使用的字体更改为兼容的字体,例如 哥特式女士,您可以从 PowerShell 窗口的属性中执行此操作。
使用有用的模块扩展您的 PowerShell 环境
除了安装字体之外,您还可以使用其他工具进一步增强控制台体验: 改善 PowerShell 体验.
- PSReadLine:通过颜色和自动完成功能改进命令行编辑。
- 温取:直观显示系统信息。
- 蝙蝠:cat 的替代品,带有语法高亮功能。
- za:ls 的现代替代品,支持 git 和元数据。
每个模块都可以通过 PowerShell 轻松安装并在您的配置文件中进行配置,以增强您的日常工作流程。
通过 PowerShell 安装字体不仅可行,而且实用。从临时加载字体到永久安装,再到使用可视化工具自定义控制台,这项技术涵盖了广泛的场景。此外,它还提供了批量自动化流程或无需管理员权限的选项,使其成为家庭用户和商业环境的敏捷解决方案。
对字节世界和一般技术充满热情的作家。我喜欢通过写作分享我的知识,这就是我在这个博客中要做的,向您展示有关小工具、软件、硬件、技术趋势等的所有最有趣的事情。我的目标是帮助您以简单而有趣的方式畅游数字世界。