Получите подробную информацию об удаленных Windows шрифтах через PowerShell - PullRequest
0 голосов
/ 19 апреля 2020

Я использую PowerShell и ImageMagick для создания пользовательских изображений из моей коллекции шрифтов, чтобы определить, какие шрифты я хочу установить в систему. Я хотел бы, чтобы изображение включало некоторую информацию о шрифте, но мне трудно извлекать эту информацию. Я нашел некоторый полезный код в [https://powershell.org/forums/topic/listing-font-details/#post -78006] , но обнаружил, что информация доступна только в системном каталоге шрифтов. Моя коллекция существует за пределами из %SystemRoot%\Fonts.

Мне бы хотелось получить доступ к таким вещам, как

  • имя шрифта (Aparajita)
  • стиль шрифта ( полужирный, обычный, итальянский c)
  • тип шрифта (Raster, OpenType / TrueType)

et c. Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

После просмотра ответа Тео и внесения некоторых изменений в код я обнаружил, что существуют различные расширенные атрибуты в зависимости от того, установлен шрифт или нет. Верхняя часть следующего вывода - это когда шрифт установлен, а нижняя часть - когда он не установлен. Короче говоря, если я хочу встроить 'Font Style' и 'Designed For' в изображение, которое я генерирую, мне нужно сначала установить шрифт.

Value                                           Attribute                      Index
-----                                           ---------                      -----
Regular                                         Font style                         1
Show                                            Show/hide                          2
Arabic                                          Designed for                       3
Text                                            Category                           4
Microsoft Corporation                           Designer/foundry                   5
Editable                                        Font embeddability                 6
OpenType                                        Font type                          7
Arabic Typesetting                              Family                             8
‎2013-‎Aug-‎22 ‏‎11:34 A                             Date modified                     10
505 KB                                          Size                              11
C:\Windows\Fonts\ARABTYPE.TTF                   Font file names                   13
6.00                                            Font version                      14
------------------------------------------------------------------------------------
609 KB                                          Size                               1
TrueType font file                              Item type                          2
2009-Jun-10 04:43 P                             Date modified                      3
2019-Dec-16 01:50 P                             Date created                       4
2019-Dec-16 01:50 P                             Date accessed                      5
A                                               Attributes                         6
Available offline                               Availability                       8
Unspecified                                     Perceived type                     9
Everyone                                        Owner                             10
Unrated                                         Rating                            19
Mamoun Sakkal, Paul C. Nelson and John Hudson   Authors                           20
Arabic Typesetting                              Title                             21
© 2008 Microsoft Corporation. All Rights Res... Copyright                         25
94.9 GB                                         Total size                        50
WINDOWS8.1 (this PC)                            Computer                          53
.ttf                                            File extension                   156
arabtype.ttf                                    Filename                         157
5.91                                            File version                     158
1.81 GB                                         Space free                       161
No                                              Shared                           178
Fonts                                           Folder name                      181
Y:\Documents\Fonts                              Folder path                      182
Fonts (Y:\Documents)                            Folder                           183
Y:\Documents\Fonts\arabtype.ttf                 Path                             185
TrueType font file                              Type                             187
Unresolved                                      Link status                      193
‎98%                                             Space used                       242
Not shared                                      Sharing status                   282
Available                                       <unknown>                        283
0 голосов
/ 19 апреля 2020

Использование Com-объекта «Shell.Application» для получения сведений о файлах не ограничивается папкой %SystemRoot%\Fonts.

Если у вас есть папка на диске, где хранится коллекция шрифтов, вы можете используйте приведенный ниже код для получения информации для каждого из файлов шрифтов:

function Get-FontInfo {
    [CmdletBinding()]
    [OutputType([Psobject])]
    Param (
        [Parameter(Mandatory=$true, ValueFromPipeline=$true)] 
        [string]$SourceFolder,
        [switch]$Recurse
    )
    # using a lookup hashtable to avoid localized field names
    $fontProperties = [ordered]@{
        0   = 'Name'
        1   = 'Size'
        2   = 'Type'
        20  = 'Author'
        21  = 'Title'
        25  = 'Copyright'
        33  = 'Company'
        34  = 'Description'
        164 = 'Extension'
        165 = 'FileName'
        166 = 'Version'
        194 = 'Path'
        196 = 'FileType'
        310 = 'Trademark'
    }
    $shell  = New-Object -ComObject "Shell.Application"
    $objDir = $shell.NameSpace($SourceFolder)
    $files  = Get-ChildItem -Path $SourceFolder -Filter '*.*' -File -Recurse:$Recurse

    foreach($file in $files) {
        $objFile   = $objDir.ParseName($file.Name)
        $mediaFile = $objDir.Items()
        $output    = [ordered]@{}
        $fontProperties.GetEnumerator() | ForEach-Object {
            $name  = $objDir.GetDetailsOf($mediaFile, $_.Name)
            if (![string]::IsNullOrWhiteSpace($name)) { 
                $output[$_.Value] = $objDir.GetDetailsOf($objFile, $_.Name)
            }
        }
        [PsCustomObject]$output
    }

    $null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objFile)
    $null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objDir)
    $null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($shell)
    [System.GC]::Collect()
    [System.GC]::WaitForPendingFinalizers()
}

Get-FontInfo -SourceFolder 'D:\Test'  # the path of the font folder

Если у вас есть подпапки внутри исходной папки, также добавьте переключатель -Recurse.

Выведите что-то вроде:

Name        : aparaj.ttf
Size        : 194 kB
Type        : TrueType-lettertypebestand
Author      : 
Title       : Aparajita
Copyright   : Copyright (c) 2011, Modular Infotech, Pune, INDIA. - Licenced to Microsoft
Company     : 
Description : This font is primarily meant for use in displaying Hindi text in documents. It is an OpenType font, based on Unicode. 
Extension   : .ttf
FileName    : aparaj.ttf
Version     : 6.00
Path        : D:\Test\aparaj.ttf
FileType    : TrueType-lettertypebestand
Trademark   : 
...