Попытка автоматизировать процесс установки шрифтов для новых компьютеров.
Для установки шрифтов Windows добавляет файл .ttf, .otf и т. Д. В C: \ Windows \ Fonts, а затем создает соответствующий ключ реестра.в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Fonts.Типичный раздел реестра будет выглядеть так:
Arial (TrueType) |Arial.ttf
Чтобы автоматизировать это, я создал два массива с использованием Get-ChildItem:
$names = Get-ChildItem -Path "C:\corp\install\fonts" | Select-Object name | Out-String | ForEach-Object {$_ -Replace "----","" ` -Replace "Name","" ` -Replace ".otf","" ` -Replace ".ttf","" } | ForEach-Object { $_.Trim() }
$files = Get-ChildItem -Path "C:\corp\install\fonts" | Select-Object name | Out-String | ForEach-Object {$_ -Replace "----","" ` -Replace "Name","" } | ForEach-Object { $_.Trim() }
Каждый $ name в $ names будет именем раздела реестра, а каждый$ file в $ files будет данными для этого ключа реестра.
Как мне поступить?Я пытался использовать хеш-таблицы, PSObjects, вложенные циклы ForEach, но все безрезультатно.Мне было трудно найти что-то здесь и в других местах, точно соответствующее этой ситуации.
Проверка ошибок на самом деле не нужна, поскольку всегда будет соответствующее значение.
ПЕРЕСМОТРЕННОЕ ЗАКЛЮЧИТЕЛЬНОЕ РЕШЕНИЕ:
Write-Host "Installing corporate fonts..."
Copy-Item -Path "C:\corp\install\fonts\*" -Destination "C:\Windows\Fonts" -Force -Recurse
$fontList = @()
$fonts = Get-ChildItem "C:\corp\install\fonts" | Select-Object -ExpandProperty Name
ForEach ( $font in $fonts ) {
$fontList += [PSCustomObject] @{
Name = $font -Replace ".otf","" ` -Replace ".ttf",""
File = $font
} |
ForEach-Object {
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" -Name $_.Name -Value $_.File
}
}