Ich habe einen Ordner mit TTF-Dateien von benutzerdefinierten Schriftarten gefüllt. Ich muss sie als Systemschriftarten mit einem Powershell-Skript installieren (das ist unter Windows Server 2008 R2). Weiß jemand, wie man das in Powershell macht? Danke!Installieren der Systemschrift mit Powershell
Antwort
Es ist ziemlich einfach. Werfen Sie einen Blick auf das Snippet unten:
$FONTS = 0x14
$objShell = New-Object -ComObject Shell.Application
$objFolder = $objShell.Namespace($FONTS)
$objFolder.CopyHere("C:\test\Myfont.ttf")
Und es sollte nicht neu zu starten, benötigen/Abmelde ...
Der 0x14 Wert der CLSID des speziellen Ordner ist.
Außerdem fand ich gerade dieses Tutorial jeden Schritt oben erklärt:
http://windowsitpro.com/scripting/trick-installing-fonts-vbscript-or-powershell-script
Ich wollte nur eine Alternative schreiben, die nicht 0x14
erfordert hart in das Skript kodiert werden. Übergeben Sie das Dateiobjekt an die Funktion, und es läuft nur auf „Install“, basierend auf dem die Datei ist:
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")
}
}
'$ shell = New-Object -ComObject Shell.Application' funktioniert nicht mit mir, nur im interaktiven Modus. Jede Voraussetzung? – VillasV
Mit dem Shell.Application
COM-Objekt nicht auf Server Core funktioniert (zumindest nicht auf 2012 R2).
hatte ich Erfolg durch einfaches Kopieren der Schriftdatei zu C:\Windows\Fonts
(in diesem Fall times.ttf) und dann die entsprechenden Registrierungseintrag mit Powershell:
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts' -Name 'Times New Roman (TrueType)' -PropertyType String -Value times.ttf
Entfernen ist die Umkehrung der Installation. Der einzige Nachteil ist, dass ein Neustart erforderlich ist, sowohl nachdem die Schriftart installiert wurde als auch bevor sie deinstalliert wird, wenn eine Anwendung darauf verwiesen hat.
Shell Code ist bekannt, auf Fern zum Scheitern verurteilt und Agenten zu bauen - wenn die comobjects-Shell versagen und Sie vetting über Remote oder Agenten bauen, dann müssen Sie die Framework-Klassen verwenden, um diese (reference)
zu tun## 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
}
#>
Es ist bekannt, dass Shell-Code auf Remote- und Build-Agenten fehlschlägt - wenn die comobjects, die Shell verwenden, fehlschlagen und Sie über Remote- oder Build-Agenten überprüfen, müssen Sie dafür die Framework-Klassen verwenden - ref: http: // www .codewrecks.com/blog/index.php/2016/05/27/vermeide-benutze-shell-befehl-in-powershell-scripts/ – Derrick
bitte fügen sie eine erklärung hinzu –
siehe den link ich in meinem letzten kommentar zur verfügung gestellt - es hat alles du musst wissen – Derrick
- 1. PowerShell-Skripts ausführen, ohne PowerShell zu installieren?
- 2. Powershell - Windows-Updates installieren?
- 3. Installieren von Service mit NSSM in Powershell
- 4. Installieren eines Topshelf-Dienstes mit Powershell
- 5. Installieren Sie Software vom Host auf der VM mit Powershell
- 6. Systemschrift für iPhone-Anwendung ändern - gesamte Anwendung
- 7. Wie programmgesteuert auf die iOS-Systemschrift zugreifen
- 8. Was ist die iOS 8 Systemschrift?
- 9. PowerShell DSC. Herunterladen und Installieren von Software
- 10. Fehlermeldung beim Installieren von Chocolatey in Powershell
- 11. Installieren Sie Excel COM Add-In mit Powershell
- 12. So installieren Sie ein Zertifikat mit Powershell-Skript
- 13. Installieren von Windows 10 App mit Powershell-Remoting
- 14. Validierung der Zertifikatskette mit Powershell
- 15. Installieren der SFGUI mit Cmake
- 16. Wie bekomme ich die Systemschrift in einer iOS App?
- 17. Powershell. C# Messung der Powershell-Host-Speicherauslastung
- 18. PowerShell: Funktioniert Version 2 nahtlos mit Skripten der Version 1?
- 19. Wie setze ich Kontrollkästchen während der MSI-Installation mit Powershell?
- 20. Versuchen Sie, PowerShell zu fangen, wenn Sie Chocolatey-Pakete installieren
- 21. 10 Powershell: Wie kann ich ein Cmdlet installieren?
- 22. Aktualisieren der JSON-Datei mit PowerShell
- 23. Installieren von CodeDOM-Anbietern mit der Befehlszeile
- 24. Debian-Paket mit der Konfigurationsänderung installieren
- 25. Powershell Teilzeichenfolge der Teilzeichenfolge
- 26. den Powershell-Aufruf Mit Operator (&) Powershell-Skripts mit Switch-Parameter
- 27. Windows-Dienst installieren/deinstallieren
- 28. Suche mit Powershell
- 29. Anwendungsbereitstellung mit Powershell
- 30. Aufruf MSTest mit Powershell
Danke! Ich werde es ausprobieren. Was bedeutet 0x14? Ist das der Wert des Namespace für Schriftarten? – carlbenson
Ja, ich habe den Code mit der Antwort und einem Link bearbeitet, bitte überprüfen Sie es. – gustavodidomenico
Funktioniert perfekt. Vielen Dank! – carlbenson