Скрипт Powershell для установки семейства шрифтов - PullRequest
0 голосов
/ 01 апреля 2020

Ниже приведен мой скрипт для установки шрифтов Monserrat из zip-файла. Я не могу понять, как проверить, если шрифт уже установлен. После установки я могу открыть папку C: \ Windows \ Fonts \ Montserrat и увидеть все из них. Когда я запускаю скрипт во второй раз, он не распознает существование этой папки. Где моя ошибка?

$Source = "Montserrat.zip"
$FontsFolder = "FontMontserrat"
Expand-Archive $Source -DestinationPath $FontsFolder
$FONTS = 0x14
$CopyOptions = 4 + 16;
$objShell = New-Object -ComObject Shell.Application
$objFolder = $objShell.Namespace($FONTS)
$allFonts = dir $FontsFolder
foreach($File in $allFonts)
{
    If((Test-Path "C:\Windows\Fonts\Montserrat") -eq $True)
    {
        echo "Font $File already installed"
    }
    Else
    {
        echo "Installing $File"
        $CopyFlag = [String]::Format("{0:x}", $CopyOptions);
        $objFolder.CopyHere($File.fullname,$CopyFlag)
    }
}

Ответы [ 2 ]

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

Наконец, мой скрипт:

$Source = "Montserrat.zip"
$FontsFolder = "FontMontserrat"
Expand-Archive $Source -DestinationPath $FontsFolder -Force
$FONTS = 0x14
$CopyOptions = 4 + 16;
$objShell = New-Object -ComObject Shell.Application
$objFolder = $objShell.Namespace($FONTS)
$allFonts = dir $FontsFolder
foreach($font in Get-ChildItem -Path $fontsFolder -File)
{
    $dest = "C:\Windows\Fonts\$font"
    If(Test-Path -Path $dest)
    {
        echo "Font $font already installed"
    }
    Else
    {
        echo "Installing $font"
        $CopyFlag = [String]::Format("{0:x}", $CopyOptions);
        $objFolder.CopyHere($font.fullname,$CopyFlag)
    }
}

Я запускаю этот скрипт, выполнив следующую команду:

set batchPath=%~dp0
powershell.exe -noexit -file "%batchPath%InstMontserrat.ps1"

Мне не нужно запускать его как администратор, но у пользователя есть права администратора .

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

Исправления вашего скрипта на основе моего комментария при условии Windows 10 :

# well-known SID for admin group
if ('S-1-5-32-544' -notin [System.Security.Principal.WindowsIdentity]::GetCurrent().Groups) {
    throw 'Script must run as admin!'
}

$source = 'Montserrat.zip'
$fontsFolder = 'FontMontserrat'

Expand-Archive -Path $source -DestinationPath $fontsFolder

foreach ($font in Get-ChildItem -Path $fontsFolder -File) {
    $dest = "C:\Windows\Fonts\$font"
    if (Test-Path -Path $dest) {
        "Font $font already installed."
    }
    else {
        $font | Copy-Item -Destination $dest
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...