使用环境variables提供跨多个OS版本和体系结构的快捷方式

本周我正面临一个场景,那里通过GPO部署快捷方式的常规技术已经不够了。

我正面临一个环境,XP,7,10都是32位(x86)和64位(x64)体系结构以及多种语言。

  • 可以为两种体系结构(x86和x64)安装许多应用程序并在每个系统上运行。
  • 一些用户需要通过不同的快捷方式来使用x86和x64版本。

那么,如何有效地创build超过60个自动分布式应用程序的快捷方式?

问题

使用像%programfiles%这样众所周知的环境variables, programfiles(x86)不再锻炼,因为:

  • XP不知道程序programfiles(x86)variables
  • programfiles是指基于机器体系结构的x86或x64文件夹。 (或者更具体地说:调用variables的进程的体系结构)
  • 对于XP,32位文件夹的名称是本地化的(即用于德语XP(运行x64)的C:\Programme (x86) ),

假设有2种语言,2种操作系统types(7,10表示“types”相同)和2种体系结构types,下面的选项对于“本地”工具是可能的,但它已经很笨拙:

要创build“最高”版本的快捷方式,您需要部署3个快捷方式“规则”:

 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) 

假设,你也想让所有的应用程序都可以同时使用x86和x64,否则会变得更糟,因为: %programfiles%会导致错误的结果(可能是x86或者x64) – 所以你每个“快捷方式”都需要WMIfilter来处理这个问题。

像这样的规则:

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

会不经意地将32 bit version 32-bit-systems上的32 bit version与名称x64链接在一起,而不使用某些WMI筛选器,从而停用规则。

所以这将是4规则,2与WMIfilter:

 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) 

所以 – 240个快捷规则,如果只有一个“外语” – 但是其中有5个 – > 480个错误的快捷规则。 – >没有!

目标

我希望能够减less所需的工作量。 只要创build(最坏的情况下)每个快捷方式2条目,说明:

  • 这个应用程序可以在任何地方使用,如32位版本。
  • 此应用程序只能在64位机器上使用,如64位版本。

使用WMI筛选器按GPO自定义环境variables

作为这个问题的解决scheme,我创build了1个GPO来创build所需的自定义环境variables:

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

所以,这个(单个GPO)总共有6条规则(对于XP的每个附加语言+1):

 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语言概述在这里: https : //www.autoitscript.com/autoit3/docs/appendix/OSLangCodes.htm )

在这里输入图像说明

结果

这个自定义环境variables现在允许我为每个应用程序准确地configuration两个shurtcut – 不pipe哪个OS-Version运行于任何体系结构或语言

 Shortcut |Target | Purpose App 64 |%pf_x64%\App\app.exe | x64-app on any environment. App 32 |%pf_x86%\App\app.exe | x86-app on any environment. 

如果两者都存在 – 两个捷径将被部署。

Windows 7,64位,ML

在这里输入图像说明

Windows 7,32位,ML

在这里输入图像说明

Windows XP,32位,ger

在这里输入图像说明

等。