我正在编写一个 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.Git
git 无法被识别,需要重新启动 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)
}