7

我有一个 MSI 打包的应用程序,它通过组策略对象 (GPO) 从 Windows 2003 域服务器部署到网络中的所有 XP 客户端计算机。

此应用程序为其配置读取两个环境变量(与哪些服务器 IP 通信),似乎我们还希望通过 GPO 样式设置或登录脚本将此配置推送到所有桌面。

跨桌面网络设置环境变量的最佳方法是什么?

4

3 回答 3

14

我的研究表明有四种方法可以做到这一点。我从Microsoft Logon Script 文档页面开始,然后从那里展开

登录脚本批处理文件

视窗服务器 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 文件

视窗服务器 2000、2003、2008

使用 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 文件

视窗服务器 2000、2003、2008

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 ----


组策略首选项 (GPP)

视窗服务器 2008

Windows Server 2008 h作为一项新功能称为“组策略首选项的环境扩展”。它允许您方便地设置原本需要的复杂批处理脚本。公开的新项目包括注册表值、环境变量等。 此处提供了快速操作指南

我无法使用此选项,因为我的客户端没有 Windows Server 2008。


概括

请根据您作为 Windows 管理员的经验告诉我,其中哪些最有效以及为什么。我只是一个桌面开发人员,需要管理员的洞察力。

于 2009-02-25T23:31:22.090 回答
2

为什么不能将此配置嵌入到 MSI 的属性表中(构建后,使用转换),然后从那里读取?这将更有意义...启动 Orca,添加几个属性,保存转换并通过 GPO 部署并应用转换。

编辑:只需重新阅读这个问题......然后将设置部署到注册表并从那里读取应用程序,而不是设置环境变量。从管理员的角度来看,为一个应用程序设置全局环境变量没有意义。

于 2009-02-26T21:52:41.850 回答
2

您始终可以通过登录脚本设置环境变量。当然!

我们就是这样做的:

不要使用“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 中部署变量的方式)

于 2014-03-19T08:56:17.423 回答