Usando variáveis de ambiente para fornecer atalhos em várias versões e arquiteturas de sistema operacional

1

Esta semana eu estava enfrentando um cenário, onde técnicas regulares para implantar atalhos através de GPOs não são mais suficientes.

Eu estava enfrentando um ambiente, onde XP, 7,10 está presente em arquiteturas de 32 bits (x86) e 64 bits (x64) - e vários idiomas.

  • Muitos aplicativos podem ser instalados para as duas arquiteturas (x86 e x64) e executados em todos os sistemas.
  • Alguns usuários precisam das versões x86 e x64 disponíveis através de diferentes atalhos.

Então, como criar eficientemente Atalhos para mais de 60 aplicativos distribuídos automaticamente?

    
por dognose 02.12.2016 / 21:01

1 resposta

1

Problema

Usando as variáveis de ambiente conhecidas, como %programfiles% , programfiles(x86) não funciona mais, porque:

  • O XP não conhece a variável programfiles(x86)
  • programfiles refere-se à pasta x86 ou x64, com base na arquitetura de a máquina. (Ou mais específico: Para a arquitetura do processo chamando a variável)
  • Para o XP, o nome da pasta de 32 bits está localizado (por exemplo, C:\Programme (x86) para um XP alemão executando x64)

Assumindo que há 2 idiomas, 2 tipos de sistema operacional (7,10 se comportam de maneira igual a "tipo") e 2 tipos de arquitetura, as seguintes opções são possíveis com ferramentas "nativas", mas já é desajeitado:

Para criar um atalho para a versão "mais alta", você precisa implantar 3 "regras" de atalho:

Shortcut |Target                           | Purpose
App      |%programfiles%\App\app.exe       | x86-app on a x86-xp-7-10 or
         |                                 | x64-app on a x64-xp-7-10
App      |%programfiles(x86)%\App\app.exe  | x86-app on a x64-7-10
App      |C:\Programme (x86)\App\app.xe    | x86-app on a x64-xp (german)

Supondo que você também queira habilitar a possibilidade de cada aplicativo estar disponível como x86 e x64 ao mesmo tempo, fica ainda pior, porque: %programfiles% resultará em resultados errados (pode ser x86 ou x64) - Então você precisa de filtros WMI em todos os "atalhos" criados para lidar com isso.

Uma regra como esta:

Shortcut |Target                           | Purpose
App 64   |%programfiles%\app\app.exe       | x64-app on a x64-7-10

vincularia acidentalmente o 32 bit version on 32-bit-systems com o nome x64 - sem algum filtro WMI, desativando a regra.

Portanto, seriam 4 regras, 2 com filtros WMI:

Shortcut |Target                           | Purpose
App 64   |%programfiles%\App\app.exe       | x64-app on a x64-xp-7-10 + wmi-filter
App 32   |%programfiles%\App\app.exe       | x86-app on a x86-xp-7-10 + wmi_filter
App 32   |%programfiles(x86)%\App\app.exe  | x86-app on a x64-7-10 
App 32   |C:\Programme (x86)\App\app.xe    | x86-app on a x64-xp (german) 

Então - 240 regras de atalho, se houver apenas uma "língua estrangeira" - Mas onde 5 deles - > 480 regras de atalho propensas a erros. - > Não!

O objetivo

Eu queria poder reduzir a quantidade de trabalho necessária. Apenas criando (no pior caso) 2 entradas por atalho, afirmando:

  • Este aplicativo pode estar disponível em qualquer lugar, como versão de 32 bits.
  • Este aplicativo pode estar disponível apenas em máquinas de 64 bits, como versão de 64 bits.

Variáveis de ambiente personalizadas por GPO, usando filtros WMI

Como solução para essa pergunta, criei 1 GPO para criar as variáveis de ambiente personalizadas necessárias:

Variable | Purpose           
%pf_x86% | Program Files x86 on any system 
%pf_x64% | Program Files x64 on any system (if existing)

Então, esse (GPO único) se resume a um total de 6 regras (+1 para cada idioma adicional do XP):

Variable | Value               | OS     | WMI Filter (Item-Level-Targeting): 
%pf_x86% | %programfiles%      |7 x86   | select * from Win32_OperatingSystem
                                          WHERE Version like "6.%" AND  
                                          ProductType="1" AND 
                                          NOT OSArchitecture = "64-bit"
%pf_x86% | %programfiles(x86)% |7,10 x64| select * from Win32_OperatingSystem
                                          WHERE  (Version like "6.%" OR 
                                          Version like "10.%") AND
                                          ProductType="1" AND 
                                          OSArchitecture = "64-bit"
%pf_x86% | %programfiles%      |XP x86  | select * from Win32_OperatingSystem 
                                          WHERE (Version like "5.1%") AND 
                                          ProductType="1"
%pf_x86% | C:\Programme (x86)  |XP x64  | select * from Win32_OperatingSystem 
                                          WHERE (Version like "5.2%") AND 
                                          ProductType="1" AND OSLanguage=1031
%pf_x64% | %programfiles%      |7,10 x64| select * from Win32_OperatingSystem
                                          WHERE Version like (Version like "6.%" OR 
                                          Version like "10.%") AND 
                                          ProductType="1" AND 
                                          OSArchitecture = "64-bit"
%pf_x64% | %programfiles%      |XP x64  | select * from Win32_OperatingSystem 
                                          WHERE (Version like "5.2%") AND 
                                          ProductType="1"

(os idiomas do sistema operacional estão descritos aqui: link )

Resultado

Estavariáveldeambientepersonalizadoagoramepermiteconfigurarexatamentedoisshurtcutsporaplicativo-NãoimportaqualversãodoOSestejasendoexecutadaemqualquerarquiteturaouidioma

Shortcut|Target|PurposeApp64|%pf_x64%\App\app.exe|x64-apponanyenvironment.App32|%pf_x86%\App\app.exe|x86-apponanyenvironment.

Eseambosexistirem,osdoisatalhosserãoimplantados.

Windows7,64bits,ML

Windows7,32bits,ML

WindowsXP,32bits,ger

pp.

    
por 02.12.2016 / 21:01