使用 PowerShell 安装字体 - 跳过已安装的字体
Installing Fonts using PowerShell - Skips Fonts Already Installed
我需要一个脚本供我的客户在网络上搜索共享并安装字体。我已经在社区的支持下创建了一个脚本。这行得通,但它一直在尝试安装已经安装的字体。这会导致问题,因为会弹出一个框询问您是否要覆盖。对于 1000 多种字体,它导致了一些问题。
客户需要在所有计算机上安装所有字体,因为它需要在几台计算机上设计打印,然后使用其他计算机打印。
在网上搜索并将脚本连接在一起后,我设法让它工作了。所以我想我会分享。如果它对我有帮助,它可能会帮助其他人。
我永远不会称自己为编码员,这样其他人可能会找到更好的方法来做到这一点。但是对于脚本,它会查看您在 $Path= 上 select 的位置,然后检查 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)
}
}
}
致谢名单如下 people/Posts。
乔丹马尔科姆 - https://jordanmalcolm.com/deploying-windows-10-fonts-at-scale/
CloudCompanyApps - https://cloudcompanyapps.com/2019/06/06/install-windows-fonts-with-powershell/
我需要一个脚本供我的客户在网络上搜索共享并安装字体。我已经在社区的支持下创建了一个脚本。这行得通,但它一直在尝试安装已经安装的字体。这会导致问题,因为会弹出一个框询问您是否要覆盖。对于 1000 多种字体,它导致了一些问题。
客户需要在所有计算机上安装所有字体,因为它需要在几台计算机上设计打印,然后使用其他计算机打印。
在网上搜索并将脚本连接在一起后,我设法让它工作了。所以我想我会分享。如果它对我有帮助,它可能会帮助其他人。
我永远不会称自己为编码员,这样其他人可能会找到更好的方法来做到这一点。但是对于脚本,它会查看您在 $Path= 上 select 的位置,然后检查 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)
}
}
}
致谢名单如下 people/Posts。 乔丹马尔科姆 - https://jordanmalcolm.com/deploying-windows-10-fonts-at-scale/ CloudCompanyApps - https://cloudcompanyapps.com/2019/06/06/install-windows-fonts-with-powershell/