启动脚本 + 本地系统用户 = 无功能程序 UI

启动脚本 + 本地系统用户 = 无功能程序 UI

我目前有一个组策略启动脚本(CMD 文件)。它按预期在启动时运行,但脚本调用的程序没有 UI。

为了举例,假设我有此命令作为我的启动脚本:

rundll32 shell32.dll,ShellExec_RunDLL "C:\Windows\System32\notepad.exe"
echo foo > C:\foo.txt

^ 这将调用“记事本”运行,并将输出写入文本文件 (foo.txt)。非常简单。当组策略运行此脚本时,将生成文本文件并运行记事本。问题是记事本没有用户界面 (UI)。我唯一能知道它正在运行的方式是通过任务管理器/进程。我已经验证了它正在运行,但我需要记事本在运行时出现在我的任务栏中。

...根据 TechNet/Microsoft 的说法: 使用 Microsoft 分配计算机启动脚本

启动脚本作为本地系统运行,并且它们具有与作为本地系统运行相关的全部权限。

我的问题是我确实需要显示记事本程序 UI,但当它在“本地系统”下运行时似乎无法实现这一点。

  1. 有没有办法让我的启动脚本以管理员身份运行?或者有没有办法让本地系统用户拥有完全运行记事本所需的权限?
  2. 我是否需要将我的 CMD 脚本更改为以其他用户身份“运行”?
  3. 我是否应该放弃计划任务的组策略?计划任务更容易设置。对我来说这似乎很难?

我想指出的是,我也尝试过使用控制面板/管理工具下的“计划任务”来实现这一点。我得到了相同的结果和相同的情况,我的脚本成功运行,但记事本 UI 从未显示。我也愿意接受使用任务计划程序或其他方法的建议。谢谢!

答案1

显示 UI 将是一件非常痛苦的事情。

首先,我会考虑将这些程序包装在服务包装器中(例如非吸吮服务经理,例如),并让服务控制管理器在启动时启动它们。从你的评论来看,这些程序确实应该被编码为 Windows 服务。(我会软件供应商停止编写需要我的服务器处于登录状态的非服务“服务”程序等。例如,糟糕的时间时钟轮询程序似乎都是这样的。)

这并不能解决您的 UI 问题。如果不“帮助”该程序,您将无法在 Windows Server 2008 中获得在 Winlogon 之上启动的 GUI 界面。您可以通过 Windows Server 2003 中的启动脚本运行程序,以在 Winlogon 之上显示其 UI。现在要执行这样的操作,您需要创建一个具有 Winlogon 令牌副本的进程,并将桌面设置为 Winlogon 桌面。

你可能会看到 UI 弹出通过允许服务包装程序与桌面交互来登录。也许吧。您可能还会让自己暴露在“粉碎”攻击之下。

如果这些是内部程序,则应考虑对其进行修改,以便它们像真正的服务程序一样工作。管理 UI 应通过 RPC 机制与后端服务进程通信。通过 TCP/IP 执行此操作,并且作为奖励,您可以在其他机器上运行管理程序。您的单片服务和 UI 结合方法不会为您带来最佳结果。

答案2

您是否尝试过“在用户登录时运行这些程序” GPO 设置?

http://support.microsoft.com/kb/314488

相关内容