На этой неделе я столкнулся со сценарием, когда обычные методы развертывания ярлыков через GPO больше не подходят.
Я столкнулся со средой, в которой XP, 7,10 присутствует как в 32-битной (x86), так и в 64-битной (x64) архитектурах и на нескольких языках.
Итак, как эффективно создавать ярлыки для более чем 60 автоматически распространяемых приложений?
Использование хорошо известных переменных среды, таких как %programfiles%
, programfiles(x86)
больше не тренируется, потому что:
programfiles(x86)
переменнаяprogramfiles
относится к папке x86 или x64 в зависимости от архитектуры машины. (Или более конкретно: к архитектуре процесса, вызывающего переменную)C:\Programme (x86)
для немецкого XP, работающего x64)Предполагая, что существует 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
на 32-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 записи для каждого ярлыка, указав:
В качестве решения этого вопроса я создал 1 объект групповой политики для создания необходимых настраиваемых переменных среды:
Variable | Purpose
%pf_x86% | Program Files x86 on any system
%pf_x64% | Program Files x64 on any system (if existing)
Итак, этот (один GPO) сводится к 6 правилам (+1 для каждого дополнительного языка 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"
(Языки ОС указаны здесь: https://www.autoitscript.com/autoit3/docs/appendix/OSLangCodes.htm)
Эта настраиваемая переменная среды теперь позволяет мне настраивать ровно два сокращения для каждого приложения - независимо от того, какая версия ОС работает на любой архитектуре или языке.
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.
А если есть оба - будут развернуты оба ярлыка.
и др. стр.