Warm tip: This article is reproduced from serverfault.com, please click

Installing Fonts using PowerShell-跳过已安装的字体

(Installing Fonts using PowerShell - Skips Fonts Already Installed)

发布于 2020-12-01 14:19:02

我需要一个脚本供我的客户搜索网络上的共享并安装字体。我已经在社区的支持下创建了一个脚本。那行得通,但是它一直想安装已经安装的字体。这会导致出现问题,因为将弹出一个框,询问你是否要覆盖。使用1000多种字体会引起一些问题。

客户需要在所有计算机上安装所有字体,因为需要在几台计算机上设计打印然后使用其他计算机进行打印。

Questioner
Chris Dewey
Viewed
0
4,181 2020-12-01 22:31:35

搜索网络并将脚本连接在一起后,我设法使其正常运行。所以我想我会分享。如果它对我有所帮助,则可能对其他人有所帮助。

我永远不会称自己为编码员,因此其他人可能会找到更好的方法来做到这一点。但是使用该脚本时,它将查看你在$ Path =上选择的位置,然后检查C:\ Users $ username \ AppData \ Local \ Microsoft \ Windows \ Fonts是否已安装。它还将仅安装.fon .otf .ttc和.ttf的文件。我需要这一点,因为即使不告诉用户,用户往往也会在此位置放置一些图像。

$FONTS = 0x14
$Path="\\NAS LOCATION\Fonts"
$FontItem = Get-Item -Path $Path
$FontList = Get-ChildItem -Path "$FontItem\*" -Include ('*.fon','*.otf','*.ttc','*.ttf')
$objShell = New-Object -ComObject Shell.Application
$objFolder = $objShell.Namespace($FONTS)
$Fontdir = dir $Path
$username = $env:UserName
  
foreach($File in $FontList) {
    if(!($file.name -match "pfb$"))
    {
        $try = $true
        $installedFonts = @(Get-ChildItem C:\Users\$username\AppData\Local\Microsoft\Windows\Fonts | Where-Object {$_.PSIsContainer -eq $false} | Select-Object basename)
        $name = $File.baseName
    
        foreach($font in $installedFonts)
        {
            $font = $font -replace "_", ""
            $name = $name -replace "_", ""
            if ($font -match $name)
            {
                $try = $false
            }
        }
        if ($try)
        {
            $objFolder.CopyHere($File.fullname)
        }
    }
}

捐赠 归以下人员/职位。Jordan Malcolm- https: //jordanmalcolm.com/deploying-windows-10-fonts-at-scale/ CloudCompanyApps- https : //cloudcompanyapps.com/2019/06/06/install-windows-fonts-with-powershell/