Можно ли задавать переменные среды системы с помощью сценариев входа в Windows? - PullRequest
7 голосов
/ 26 февраля 2009

У меня есть приложение, упакованное MSI, которое развертывается через объекты групповой политики (GPO) с сервера домена Windows 2003 на все клиентские компьютеры XP в сети.

Это приложение считывает две переменные среды для своей конфигурации (с какими IP-адресами сервера следует общаться), и, похоже, мы также хотим передать эту конфигурацию через настройку стиля GPO или сценарий входа на все рабочие столы.

Каков наилучший подход для установки переменных среды в сети настольных компьютеров?

Ответы [ 3 ]

14 голосов
/ 26 февраля 2009

Мое исследование говорит, что есть четыре способа сделать это. Я начал со страниц документации Microsoft Logon Script и разошелся оттуда .

Пакетный файл входа в систему

Windows Server 2000, 2003, 2008

Сценарии пакетного файла входа в систему (.BAT) являются лишь временным экземпляром окна CMD, и установленные там переменные среды исчезают, как только окно входа закрывается.

set MYVAR=MyValue

Не будет работать по вышеуказанной причине.

Итак, в качестве альтернативы, я могу попытаться установить переменную путем прямой записи в реестр, как для системной переменной среды:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v MYVAR /t REG_EXPAND_SZ /d MyValue

или в переменные среды пользователя, например:

reg add HKCU\Environment /v MYVAR /t REG_EXPAND_SZ /d MyValue 

Недостатком здесь является то, что переменные, хотя и записываются в реестр, не читаются до следующего входа в систему для всех, что я вижу. Новое окно CMD не показывает их след, пока пользователь не войдет в систему заново.


Скрипт входа в VHH файл VBS

Windows Server 2000, 2003, 2008

С помощью сценария входа в Visual Basic Script (VBS) вы можете использовать более программный метод для доступа к переменным среды. Это похоже на мой самый жизнеспособный подход. Этот пример будет добавлен в конец PATH .

Set WSHShell = WScript.CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment("SYSTEM")
WshEnv("Path") = WshEnv("Path") & ";M:\DB\whatever\"

Этот пример просто устанавливает переменную.

Set WSHShell = WScript.CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment("SYSTEM")
WshEnv("MYVAR") = "MyNewValue"

Этот подход дает переменные, которые сразу же доступны через окно CMD. Перезагрузка не требуется, как запись в реестре пакетных файлов.


Файл ADM

Windows Server 2000, 2003, 2008

Файлы ADM - это способ предоставить пользовательскую функциональность настроек редактору групповой политики. Кажется, сложно установить их и увидеть на контроллере домена, поэтому я перепрыгиваю через эту опцию.

Справочник TechNet по технической поддержке Microsoft по расположению файлов ADM.
Еще одна статья о файлах ADM и их использовании для настройки параметров реестра.
Tom's Hardware в файлах ADM.

---- set.adm ---- 
CLASS MACHINE 
CATEGORY "Environment" 
POLICY "Self dfined variables" 
KEYNAME "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" 
PART "Set MyVar1 =" EDITTEXT 
DEFAULT "MyValue1" 
VALUENAME MyVar1 ; EXPANDABLETEXT 
; add expandabletext if it can contain Variables itself 
END PART 
END POLICY 
END CATEGORY 
---- set.adm ----


Предпочтения групповой политики (GPP)

Windows Server 2008

Windows Server 2008 h в качестве новой функции , названной Расширения среды для предпочтений групповой политики . Это позволяет вам удобно устанавливать, какие в противном случае требуются сложные пакетные сценарии. Представленные новые элементы включают в себя значения реестра, переменные среды и многое другое. Краткое руководство доступно здесь .

Я не могу использовать эту опцию, потому что у моих клиентов нет Windows Server 2008.


Резюме

Скажите, пожалуйста, исходя из вашего опыта работы в качестве администраторов Windows, какой из них лучше всего работает и почему. Я просто разработчик для настольных компьютеров, и мне нужно понимание администратора.

2 голосов
/ 19 марта 2014

Вы всегда можете установить переменную окружения через скрипт входа в систему. Конечно!

Вот как мы это делаем:

Не используйте «set», поскольку он не переносится в пользовательскую среду. Переменные, установленные с помощью «set», действительны только во время выполнения сценария входа в систему.

Используйте "setx".

Итак, чтобы установить переменную в среде пользователя

setx MYSPECIALVAR THIS_IS_THE_VALUE

setx Softwaresource  \\\this\is\the\value\of\the\variable

(Примечание. Знак = отсутствует, как в случае с set MYSPECIALVAR=THIS_IS_THE_VALUE)

Если у пользователя есть права администратора на ПК, вы также можете установить переменные в глобальном окружении системы с помощью

setx MYSPECIALVAR THIS_IS_THE_VALUE /m

(Это способ развертывания переменных на ПК с установочными скриптами и административными правами)

2 голосов
/ 27 февраля 2009

Почему вы не можете встроить эту конфигурацию в таблицу свойств MSI (после сборки, используя преобразование), а затем прочитать оттуда? В этом было бы гораздо больше смысла ... запустить Orca, добавить пару свойств, сохранить преобразование и развернуть его с помощью объекта групповой политики с примененным преобразованием.

Редактировать: просто перечитайте этот вопрос ... затем разверните настройки в реестре и прочитайте приложение оттуда, а не устанавливайте переменные среды. Установка глобальных переменных среды для одного приложения не имеет смысла для точки зрения администратора.

...