本周我面临的场景是,通过 GPO 部署快捷方式的常规技术已经不再足够了。
我面临的环境是 XP、7、10 同时存在于 32 位(x86)和 64 位(x64)架构中 - 并且有多种语言。
- 许多应用程序可以在两种架构(x86 和 x64)上安装并在每个系统上运行。
- 一些用户需要同时使用 x86 和 x64 版本,可通过不同的快捷方式获取。
那么,如何有效地为60多个自动分发的应用程序创建快捷方式呢?
答案1
问题
%programfiles%
使用诸如 之类的众所周知的环境变量programfiles(x86)
不再有效,因为:
- XP 不知道
programfiles(x86)
变量 programfiles
指的是 x86 或 x64 文件夹,具体取决于计算机的体系结构。(或者更具体地说:调用变量的进程的体系结构)- 对于 XP,32 位文件夹的名称已本地化(即
C:\Programme (x86)
对于运行 x64 的德国 XP)
假设有 2 种语言、2 种操作系统类型(7、10 在“类型”方面表现相同)和 2 种体系结构类型,则使用“本机”工具可以实现以下选项,但这已经很笨拙了:
要创建“最高”版本的快捷方式,需要部署 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) - 所以您需要在创建的每个“快捷方式”上都使用 WMI 过滤器来处理这个问题。
像这样的规则:
Shortcut |Target | Purpose
App 64 |%programfiles%\app\app.exe | x64-app on a x64-7-10
会意外地将32 bit version
on32-bit-systems
与名称链接起来x64
- 如果没有某些 WMI 过滤器,则会停用该规则。
因此,它将有 4 条规则,其中 2 条带有 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)
因此 - 240 条快捷规则,如果只有一种“外语” - 但是其中有 5 条 ->480 个容易出错的快捷规则。-> 不!
目标
我希望能够减少所需的工作量。只需为每个快捷方式创建(最坏情况)2 个条目,说明:
- 该应用程序可以在任何地方使用,为 32 位版本。
- 此应用程序仅在 64 位机器上可用,为 64 位版本。
使用 WMI 过滤器通过 GPO 自定义环境变量
为了解决这个问题,我创建了 1 个 GPO 来创建所需的自定义环境变量:
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"
(操作系统语言概述如下:https://www.autoitscript.com/autoit3/docs/appendix/OSLangCodes.htm)
结果
这个自定义环境变量现在允许我为每个应用程序精确配置两个 shurtcut - 无论哪个操作系统版本在任何架构或语言上运行
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 位,德语
等页