仅使用 powershell 命令下载和安装字体

仅使用 powershell 命令下载和安装字体

我正在编写一个 powershell 脚本,用于在 Windows 11 终端上安装和初始化 oh-my-posh。我遇到的问题是 oh-my-posh 需要一种名为CaskaydiaCove Nerd Font(或其他 nerd 字体)的字体本网站

有没有办法只使用 powershell 下载并安装所需的字体?您可能会说为什么不直接将字体文件包含在脚本中,但这并不一定是更新版本。目标是当脚本执行时它将安装最新的CaskaydiaCove Nerd Font

如果有一个存储库,我可以在那里轻松获取这些字体的最新版本

更新:

因此,我能够编写可运行的命令行,但需要进行完善。

winget install -e --id Git.Git
git clone -–depth 1 https://github.com/ryanoasis/nerd-fonts.git
cd nerd-fonts
Set-ExecutionPolicy RemoteSigned # Changes Restricted -> RemoteSigned
Y  # needs manual input
./install.ps1 CascadiaCode -WindowsCompatibleOnly

所以它基本上安装 git,仅下载最新的存储库,然后安装。

如何更改执行策略而无需我输入“Y”?安装后我是否还需要改回执行策略?

另外,执行后还存在一个问题,即winget install -e --id Git.Gitgit 无法被识别,需要重新启动 powershell,有什么方法可以缓解这个问题吗?

答案1

受到关联提供评论经过@Markus Meyer,但更容易管理和核算最新版本的字体发布。

下载并安装最新的 Nerd-Font 版本

该代码是一个 PowerShell 脚本,它从 Nerd Fonts GitHub 存储库下载并安装名为“CascadiaCode”的字体。

该脚本首先设置字体名称和 Nerd Fonts 存储库的 URI。然后,它会向存储库的最新版本 URI 发送 Web 请求,这会导致重定向到包含最新版本标签的实际版本号的 URL。

为了捕获重定向的 URL,脚本指示Invoke-WebRequest不允许使用 进行重定向-MaximumRedirection 0,但捕获响应并查看地点URL 的标头。

URL 的最后一部分包含版本,因此Split-Path-叶子开关参数从响应头中提取最新版本号。

接下来,脚本下载字体档案并将其解压到与字体同名的文件夹中。然后,它使用 Windows Shell COM 对象将所有扩展名为“.ttf”的字体文件复制到 Windows Fonts 文件夹中。

$FontName = 'CascadiaCode'
$NerdFontsURI = 'https://github.com/ryanoasis/nerd-fonts/releases'

$WebResponse = Invoke-WebRequest -Uri "$NerdFontsURI/latest" -MaximumRedirection 0 -ErrorAction SilentlyContinue

$LatestVersion = Split-Path -Path $WebResponse.Headers['Location'] -Leaf

Invoke-WebRequest -Uri "$NerdFontsURI/download/$LatestVersion/$FontName.zip" -OutFile "$FontName.zip"

Expand-Archive -Path "$FontName.zip"

$ShellApplication = New-Object -ComObject shell.application
$Fonts = $ShellApplication.NameSpace(0x14)

Get-ChildItem -Path ".\$FontName" -Include '*.ttf' -Recurse | ForEach-Object -Process {
    $Fonts.CopyHere($_.FullName)
}

相关内容