我有一个 MSI 打包的应用程序,它通过组策略对象 (GPO) 从 Windows 2003 域服务器部署到网络中的所有 XP 客户端计算机。
此应用程序为其配置读取两个环境变量(与哪些服务器 IP 通信),似乎我们还希望通过 GPO 样式设置或登录脚本将此配置推送到所有桌面。
跨桌面网络设置环境变量的最佳方法是什么?
我有一个 MSI 打包的应用程序,它通过组策略对象 (GPO) 从 Windows 2003 域服务器部署到网络中的所有 XP 客户端计算机。
此应用程序为其配置读取两个环境变量(与哪些服务器 IP 通信),似乎我们还希望通过 GPO 样式设置或登录脚本将此配置推送到所有桌面。
跨桌面网络设置环境变量的最佳方法是什么?
我的研究表明有四种方法可以做到这一点。我从Microsoft Logon Script 文档页面开始,然后从那里展开。
登录批处理文件 (.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 窗口不会显示它们的踪迹。
使用 Visual Basic 脚本 (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 文件是一种向组策略编辑器公开设置的自定义功能的方法。让它们在域控制器上安装和可见似乎很棘手,所以我跳过了这个选项。
Microsoft 支持关于 ADM 文件位置的 TechNet 参考。
另一篇关于 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 ----
Windows Server 2008 h作为一项新功能称为“组策略首选项的环境扩展”。它允许您方便地设置原本需要的复杂批处理脚本。公开的新项目包括注册表值、环境变量等。 此处提供了快速操作指南。
我无法使用此选项,因为我的客户端没有 Windows Server 2008。
请根据您作为 Windows 管理员的经验告诉我,其中哪些最有效以及为什么。我只是一个桌面开发人员,需要管理员的洞察力。
为什么不能将此配置嵌入到 MSI 的属性表中(构建后,使用转换),然后从那里读取?这将更有意义...启动 Orca,添加几个属性,保存转换并通过 GPO 部署并应用转换。
编辑:只需重新阅读这个问题......然后将设置部署到注册表并从那里读取应用程序,而不是设置环境变量。从管理员的角度来看,为一个应用程序设置全局环境变量没有意义。
您始终可以通过登录脚本设置环境变量。当然!
我们就是这样做的:
不要使用“set”,因为它不会被接管到用户环境中。使用“set”设置的变量仅在登录脚本运行时有效。
使用“setx”。
因此,要在用户环境中设置一个变量
setx MYSPECIALVAR THIS_IS_THE_VALUE
setx Softwaresource \\\this\is\the\value\of\the\variable
(注意:没有=
符号,因为它会是这种情况set MYSPECIALVAR=THIS_IS_THE_VALUE
)
如果用户在 PC 上具有管理权限,您还可以在全局系统环境中设置变量
setx MYSPECIALVAR THIS_IS_THE_VALUE /m
(这就是我们使用安装脚本和管理权限在整个 PC 中部署变量的方式)