我有一個文件夾充滿自定義字體的TTF文件。我需要使用powershell腳本(這是在Windows Server 2008 R2上)將它們安裝爲系統字體。有誰知道如何在PowerShell中做到這一點? 謝謝!使用Powershell安裝系統字體
9
A
回答
15
這很簡單。看看下面的代碼片段:
$FONTS = 0x14
$objShell = New-Object -ComObject Shell.Application
$objFolder = $objShell.Namespace($FONTS)
$objFolder.CopyHere("C:\test\Myfont.ttf")
,它不應該要求重新啓動/註銷...
的0x14的值是特殊文件夾的CLSID。
另外我剛剛發現這個教程解釋上述每個步驟:
http://windowsitpro.com/scripting/trick-installing-fonts-vbscript-or-powershell-script
2
只是想後不需要0x14
被硬編碼到腳本的替代品。將文件對象傳遞給函數,它將只運行基於「安裝」裏的文件是:
Function Install-Font {
Param (
[Parameter(Mandatory=$true,ValueFromPipeline=$true)][System.IO.FileSystemInfo[]]$File
)
$shell = New-Object -ComObject Shell.Application
$File | % {
$Fonts = $shell.NameSpace($_.Directory.Name)
$font = $Fonts.ParseName($_.Name)
$font.InvokeVerb("Install")
}
}
+0
'$ shell = New-Object -ComObject Shell.Application'只在交互模式下不適用於我。任何先決條件? – VillasV
0
使用Shell.Application
COM對象的服務器核心(至少不會在2012 R2不起作用)。
我不得不簡單地複製字體文件到C:\Windows\Fonts
(在這種情況下TIMES.TTF),然後添加使用PowerShell相應註冊表項的成功:
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts' -Name 'Times New Roman (TrueType)' -PropertyType String -Value times.ttf
切除是安裝相反。唯一的缺點是在安裝字體之後以及在應用程序引用它之前還需要重新啓動時才需要重新啓動。
0
shell代碼已經知道失敗的遠程和生成代理 - 如果使用shell的comobjects是失敗,你是通過遠程審批或生成代理,那麼你將需要使用框架類來完成這一(reference)
## Add or Remove Font Files - only tested with TTF font files thus far
#<#
#=======================================================================================================
# ADD or REMOVE MULTIPLE FONT FILES [Using ComObjects]
#=======================================================================================================
# This code will install or uninstall a font using ComObject
# You Must Modify the following variables in order to work
# (A) $dirFiles ==> This is the source folder path that contains all of your font files
# (B) $InstallOrUninstall ==> $true = Install Font ... $false = UnInstall Font
#=======================================================================================================
# Define Working Variables
$dirFiles = "C:\Temp\Fonts"
$InstallOrUninstall = $false # $true = Install = 1 ...or... $false = UnInstall = 0
$srcFontFiles = Get-ChildItem "$($dirFiles)\Fonts"
$Fonts = (New-Object -ComObject Shell.Application).Namespace(0x14)
# Copy each file into the Font Folder or Delete it - Depends on the $InstallOrUninstall variable setting
ForEach($srcFontFile in $srcFontFiles)
{
$srcFontFileName = $srcFontFile.name
$srcFontFileFullPath = $srcFontFile.fullname
$targFonts = "C:\Windows\Fonts\$($srcFontFileName)"
If (Test-Path $targFonts -PathType any) { Remove-Item $targFonts -Recurse -Force } # UnInstall Font
If ((-not(Test-Path $targFonts -PathType container)) -and ($InstallOrUninstall -eq $true)) { $fonts.CopyHere($srcFontFileFullPath, 16) } # Install Font
}
#>
相關問題
- 1. 腳本安裝字體powershell
- 2. 在瀏覽器中禁用系統中安裝的字體
- 3. 使用powershell安裝Windows Server 2012 Gui核心安裝使用powershell
- 4. Powershell幫助系統使用
- 5. @ font-face不會在系統或瀏覽器中安裝字體?
- 6. 如何在iOS中安裝字體系統
- 7. OS X dev:如何在系統中安裝新字體
- 8. 系統::繪圖::文本:: PrivateFontCollection不工作時,字體未安裝
- 9. 使用系統安裝rbenv命令行gems安裝
- 10. 使用PowerShell安裝PSCX
- 11. 如何安裝使用PowerShell
- 12. 使用powershell遠程安裝
- 13. 安裝文件系統
- 14. 雙操作系統安裝
- 15. 系統級燒瓶安裝
- 16. 操作系統安裝OpenStack
- 17. Oracle安裝操作系統
- 18. 獲取安裝在系統
- 19. 在Ubuntu安裝Jupyter系統
- 20. 使用sdl2-ttf打開系統字體
- 21. 如何讓DTCoreText使用系統字體?
- 22. 使用Delphi查找系統字體
- 23. SDL_TTF系統字體
- 24. Windows系統上的非系統字體
- 25. adb安裝系統應用程序
- 26. 可以用ia64系統安裝EPD嗎?
- 27. VB安裝和系統用戶
- 28. Android上的通用系統安裝
- 29. 使用Inno安裝安裝字體 - 替換已鎖定的字體
- 30. PXE引導安裝操作系統並使用程序獲得其成功的操作系統安裝狀態
謝謝!我會測試一下。 0x14表示什麼?那是字體命名空間的價值嗎? – carlbenson
是的,我編輯的代碼與答案和鏈接,請檢查出來。 – gustavodidomenico
完美的作品。謝謝! – carlbenson