我不确定这实际上是否可能,但也许这里有人遇到了同样的问题并找到了一个好方法。
问:如何在计算机/终端服务器上为用户创建只运行一次的登录脚本?
一点背景知识:我知道理论上可以创建一个登录脚本来检查文件是否存在于用户可以访问的位置,如果该文件存在,则中止脚本,然后在登录脚本结束时,创建该文件。本质上,这会做我想要的,但它仍然会在每次登录时运行脚本,我很好奇是否有更好的方法。
我要解决的问题:当用户第一次运行 MS Teams 时,它会将自动启动设置为 true,并且用户总是启动 MS Teams。对于用户只是偶尔使用团队的终端服务器,最好不要自动启动团队,让用户自己启动团队。
我有一个脚本,我必须为每个用户运行一次,它将更改团队的 json 配置并将标志设置为 false。用户有配置文件磁盘,所以我无法进行一次全局扫描来为每个人更改它。该脚本一旦运行将永远为该用户修复它,所以我真的只需要运行一次。
有 runonce 注册表设置可以启动一次程序。是否有一个等效的登录脚本,我可以通过 GPO 推送,这样登录脚本只为任何给定用户运行一次,但不会被删除,所以所有用户都可以运行一次?
在注册表中为所有用户设置 RunOnce 可能会完成这项工作,但实施起来有点混乱(示例)。
Windows 有一个简单的机制,用于在登录过程的早期运行命令,称为 Active Setup。Windows 使用相同的机制向新用户发送“设置个性化设置”的消息,但它也适用于现有用户。
这通过 Windows 将机器配置文件 (HKLM) 的 Active Setup 注册表项与子项的当前用户配置文件 (HKCU) 副本进行比较来实现。如果不匹配,它会运行指示的命令,然后将 HKCU 设置为匹配 HKLM,表示无需再次运行它。
您可以检查 Active Setup 方法是否适合您的需要和您的环境。
您只需要在计算机上更新一次 Active Setup 的两个注册表值,即可为所有登录运行一次命令。这个例子将运行
notepad
:参考:
由于 Active Setup 由 执行
explorer.exe
,因此终端服务器会出现问题,其中 Explorer 不是外壳。微软创建了一个替代解决方案:
RailRunonce
. 这可以在注册表中找到HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\RailRunonce
。问题
RailRunonce
在于它不进行版本控制,因此解决方案是将它与 Active Setup 结合,通过在上述键下创建一个包含此命令的任意名称的值:该进程
runonce.exe
是 Windows 用于处理RunOnce
注册表项的进程。要记住的要点是这里的执行将是并行的,不会暂停用户进程。参考: 文章:深入了解主动设置:第 4 部分 - 结局,