Como empurrar fontes via GPO

1

uma pergunta frequente, mas a solução padrão parece não funcionar para mim.

Eu tenho um Windows Server 2012-R2 AD com principalmente clientes do Windows 7. Eu tenho um GPO que faz o seguinte:

Configuração do Computador \ Preferências \ Configurações do Windows \ Arquivos:

Action: Update
Source: <Network drive domain computers have read access to>\fonts\*
Destination: %WindowsDir%\Fonts

Depois, atualizo também o Registro para cada fonte individualmente:

Action: Update
Hive: HKLM
Value name: <fontname> <(TrueType)|(OpenType)>
Value type: REG_SZ
Value data: <font file name>

Quando eu faço gpupdate , as alterações do registro são implantadas, mas as fontes nunca chegam na pasta de fontes. Não é um problema de acesso, porque quando eu mudo o destino para o meu Desktop, todas as fontes aparecem. Eu também posso instalá-los manualmente a partir daí.

Eu tentei:

  • Alterando a ação para CRIAR ou SUBSTITUIR
  • Usando o caminho completo para o destino em vez de% WindowsDir%
  • Usando caminho completo para a origem (sem curinga)
  • Reiniciando a máquina de destino

Eles nunca são copiados para a pasta de fontes. Existe uma maneira de fazer isso sem criar um MSI?

    
por mzhaase 03.11.2016 / 17:58

2 respostas

1

@ Tim-Brigham teve a ideia certa, mas é um pouco mais complicado.

Primeiro, crie um domínio de compartilhamento de rede em que os computadores tenham acesso read . Como você chamará um script com privilégios de sistema desse compartilhamento, é importante que eles possam ler somente.

Neste compartilhamento de rede, crie também uma pasta com todas as fontes que você deseja instalar.

Em seguida, crie este script na pasta da rede:

$path = "<path to font folder on network share>"
$shell = New-Object -ComObject Shell.Application
$fonts = $shell.Namespace($path).Items()
# check if font already exists in windows font folder, if not, install
foreach($font in $fonts)
{
    $sourcepath = $font.path
    $filename   = Split-Path -Leaf $sourcepath
    $destinationpath = 'C:\Windows\fonts\' + $filename

    if (![System.IO.File]::Exists($destinationpath))
    {
        $font.InvokeVerbEx("Install")
    }
}

Em seguida, crie uma tarefa agendada por GPO:

Computer Configuration -> Preferences -> Control Panel Settings -> Scheduled Task
Action: Update
Use the following User Account: S-1-5-18
Run with highest privileges
Triggers: At logon
Actions: Start a program: powershell.exe -NonInteractive -WindowStyle Hidden -ExecutionPolicy bypass -File <scriptpath>

É importante usar a conta de usuário S-1-5-18 aqui, isto é NT-Authority / SYSTEM, mas se você usar o literal NT-Authority / SYSTEM, o mapeamento de usuários não funcionará.

Os usuários precisarão fazer log-on / on duas vezes. Uma vez para instalar fontes, mas o cache de fontes não é atualizado até o login.

    
por 04.11.2016 / 10:38
2

Existem várias maneiras de lidar com isso. Pessoalmente eu encontrei o verbo 'Instalar' / ação para o arquivo de fonte foi o mais confiável. Isso pode ser feito facilmente em Powershell ou VBS com uma tarefa agendada SYSTEM.

Eu uso uma variação para fazer todas as fontes em uma pasta.

$path = "\font-server\Fonts"
$shell = New-Object -ComObject Shell.Application
$shell.Namespace($path).Items().InvokeVerbEx("Install")
    
por 03.11.2016 / 18:12