Можно ли установить системные переменные среды с помощью сценариев входа в Windows?

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

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

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

Ответов (3)

Решение

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

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

Согласно моим исследованиям, это можно сделать четырьмя способами. Я начал со страниц документации 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 не показывает их следов до тех пор, пока пользователь не войдет в систему повторно.


Файл сценария входа в систему WSH 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 - это способ предоставить редактору групповой политики настраиваемые функции параметров. Кажется сложным установить их и увидеть на контроллере домена, поэтому я перескакиваю через этот вариант.

Справочник Microsoft Support TechNet по расположению файлов ADM.
Еще одна статья о файлах ADM и их использовании для настройки параметров реестра.
Оборудование Тома в файлах 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, какой из этих вариантов работает лучше всего и почему. Я просто разработчик настольных компьютеров, и мне нужна информация администратора.

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

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

Не используйте «набор», так как он не переносится в пользовательскую среду. Переменные, установленные с помощью "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

(Таким образом мы развертываем переменные на всех ПК с помощью сценариев установки и административных прав)