scripting - 可以通过 Windows 登录脚本设置系统环境变量吗?

标签 scripting login batch-file windows-installer automated-deploy

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

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

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

最佳答案

我的研究表明有四种方法可以做到这一点。我从 Microsoft Logon Script documentation pages and fanned out from there 开始.

登录脚本批处理文件

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

window 服务器 2000、2003、2008

使用 Visual Basic 脚本 (VBS) 登录脚本,您可以使用更具编程性的方法来访问环境变量。这看起来是我最可行的方法。 This example would append to the end of 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 文件

window 服务器 2000、2003、2008

ADM 文件是一种向组策略编辑器公开设置的自定义功能的方法。让它们在域 Controller 上安装和可见似乎很棘手,所以我跳过了这个选项。

Microsoft Support TechNet Reference on ADM File Locations.
Another article about ADM files and using them to set Registry settings.
Tom's Hardware on ADM Files.
---- 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)

window 服务器 2008

Windows Server 2008 小时 as a new feature称为Environment Extensions for the Group Policy Preferences .它允许您方便地设置原本需要的复杂批处理脚本。公开的新项目包括注册表值、环境变量等。 A quick how-to guide is available here .

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

概括

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

关于scripting - 可以通过 Windows 登录脚本设置系统环境变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/588321/

相关文章:

linux - ksh:将函数输出分配给数组

powershell - 使用 PowerShell 的类型 -wait 和 select-string 实时监控应用程序日志的条件并执行操作(如 tail -f 或 watch)

python - 使用 gdb 时数据目录中有多个目录

angularjs - 文件夹结构、登录设计、路由和繁重的任务

cookies - 保存时间最长的 cookies

windows - 当 Pageant 完成加载 SSH key 时运行批处理文件

python - 在 python 中,如何将 1 个或多个文件作为具有绝对路径的参数拖放到我的脚本中? (适用于 Windows、Linux 和 Mac)

python - 无法使用 python mechanize 自动登录(必须 "activate"特定浏览器)

java - ProcessBuilder 找不到文件?!

linux - 将日期列表传递给 linux 中的批处理文件