首页 > 系统相关 >powershell安装字体

powershell安装字体

时间:2023-01-11 16:45:03浏览次数:58  
标签:fontFile fontName Fonts write host 字体 font 安装 powershell

参考  Install-Fonts (powershellweekly.com)

使用 -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)

本质是

将字体复制到:

C:\Windows\Fonts

并在其中注册一个条目:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Fonts
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  
}  

 

标签:fontFile,fontName,Fonts,write,host,字体,font,安装,powershell
From: https://www.cnblogs.com/kyo413/p/17044206.html

相关文章

  • RocketMQ安装时问题
    Windows环境下RocketMQ安装时问题步骤去官网下载运行版本zip去git上下载管理端安装问题RocketMQ的目录和jdk的目录都不能有空格否则提示找不到主类无奈我的jdk......
  • 服务器安装宝塔
    一:连接tabby,登录系统新建新配置ssh连接  输入名称,主机 二:输入用户名和密码(默认为root,密码自己设置)然后再输入宝塔对应的安装脚本宝塔链接:https://www.bt.cn/......
  • windows2012通过powershell安装远程组件技巧
    概要:通过服务器管理器安装远程桌面服务会报错一直没有办法解决之后了解到安装组件可以通过power命令安装 powershell命令说明https://docs.microsoft.com/en-us/wind......
  • Windows Server 2016离线安装.NET Framework 3.5
    安装方法:1、下载NetFx3.cab后将其放于C盘WINDOWS文件夹下(C:\Windows)2、点击“开始”找到“WindowsPowerShell”右击“以管理员身份运行”,输入如下命令:dism.exe/onlin......
  • centos 安装Docker
    查看CentOS系统的内核版本Docker要求CentOS系统的内核版本高于3.10。通过uname-r命令查看你当前的内核版本[root@VM_211_6_centosnginx-1.6.2]#uname-r3.......
  • docker 中安装 Jenkins
    ☝️、准备一个ubuntu虚拟机(或者linux服务器,下文简称服务器)服务器中已经配置好docker(默许大家都有了)服务器可以上外网(可以使用镜像加速)✌️、安装一、下载je......
  • qt4.8.7安装
    centos7.9Qt4.8.7静态编译安装依赖:yum-yinstalllibX11-devellibXext-devellibXtst-devel解压Qt源码到指定目录:tar-zxvfqt-everywhere-opensource-src-4.8.7.......
  • Qt Creator 安装 Beautifier
    QtCreator安装Beautifier首先需要启动Beautifier插件,Help-AboutPlugins-C++-Beautifier勾选此项即可。然后重启Creator启动插件后在工具-选项中会具有Beautifi......
  • ubuntu20.04 安装 samba 并配置 win10映射
    1、安装samba软件并配置开机自启动apt-getinstallsambasamba-commonsystemctlenablesmbd2、创建sumba主文件夹mkdir/opt/data/sambachmod-R777/opt/data/sa......
  • 如何在 Zorin OS 上安装 ONLYOFFICE 桌面编辑器
    ​​ONLYOFFICE桌面应用​​是一款开源办公套件,包括用于文本文档、电子表格、演示文稿和表单的编辑器。除了离线工作,您还可以将该应用连接到云端进行在线文档协作。这款套......