有人要求我为我们的远程笔记本电脑用户寻找解决方案,他们在客户现场尝试使用 Powerpoint 和 Excel 进行演示。我们运行的是 Server 2008/Win 7 环境。我们有一个组策略,在 5 分钟不活动后锁定每个人的 PC,并要求输入密码才能重新登录。有人问我是否可以为笔记本电脑用户更改此设置,当他们登录但不在域本地时。他们希望能够调整它,以便在他们使用 PP、word 或 Excel 进行演示时屏幕不会锁定。据我所知,powerpoint 在全屏模式下会禁用屏幕保护程序,但我不确定如何使用其他程序实现这一点。我尝试查看笔记本电脑上的演示模式,但由于组策略,“禁用屏幕保护程序”设置显示为灰色。有什么想法吗?谢谢。
答案1
我已经能够向自己证明,presentationsettings
我最初建议的工具确实“尊重”阻止用户更改屏幕保护程序的组策略设置。我并不知道这种行为,但它肯定是有道理的,因为当没有与演示相关的内容发生时,用户只会使用此工具来免除屏幕保护程序。
正如@HopelessN00b 提到的,您可能需要更改组策略,因为它适用于“远程”笔记本电脑。您需要调用环回策略处理因为屏幕保护程序设置是针对每个用户的,而不是针对每台计算机的。环回策略处理允许您将用户设置应用于计算机,而不管登录的用户是谁。
不幸的是,该功能让很多人感到困惑。它有几种不同的“模式”(合并与替换),这让它更加令人困惑。对于您的应用程序,您可以创建一个 GPO 链接,链接到一个假设的“远程笔记本电脑”OU,该 OU 在“计算机配置”部分中启用“合并”模式下的环回策略处理,并在“用户配置”部分中将屏幕保护程序属性设置为您想要的任何值。下次重新启动这些计算机时(因为从非环回切换到环回需要重新启动——后台策略刷新不会启用它),您会看到计算机开始从这个新的 GPO 中获取屏幕保护程序设置。
除了编写某种黑客客户端服务程序来进入用户的注册表并切换组策略屏幕保护程序限制值(因为用户无法自己执行此操作,因为注册表权限)之外,我认为你会陷入这样一种境地:你必须选择两害相权取其轻,要么禁用笔记本电脑上用户的屏幕保护程序限制,要么使用一些第三方“鼠标抖动器”或键盘模拟软件,或者只是告诉用户忍受它。
编辑:
有许多第三方程序可以完成您要寻找的任务,但仅使用内置操作系统组件来完成任务需要一定的“优雅性”。
这是一个适合执行的小型 VBScript 程序wscript.exe
(这意味着您可以使用组策略首选项将其直接部署到计算机的“启动”文件夹中),假设您的域的 DNS 名称无法在网络外部解析,它应该可以完成您要查找的操作。(如果可以在外部解析,那么坦率地说,您得到了应得的。)
此脚本位于轮询循环中,用于nslookup
解析环境变量中命名的域USERDNSDOMAIN
。它每 10 秒轮询一次,但您可以通过更改Const POLL_DELAY
行来修改它。(再次执行自身的奇怪旋转是必要的,因为如果仅由执行wscript.exe
,则每个轮询间隔都会短暂出现一个窗口 - 这根本不是件好事。)
当域名无法解析时,“F15”键被“按下”,会导致足够的活动,以至于 Windows 不会激活屏幕保护程序。
该脚本在 Windows 8.1 x64 上进行了测试,测试用户为域用户,该域用户应用了组策略对象,其中包括管理模板设置:
- 启用屏幕保护程序 - 已启用
- 防止更改桌面背景 - 已启用
- 防止更改屏幕保护程序 - 已启用
- 密码保护屏幕保护程序 - 已启用
- 屏幕保护程序超时 - 已启用 - 30 秒
- 强制特定屏幕保护程序 - 已启用 -
scrnsave.scr
我的测试方法如下:
- 将名为的程序放入
ss.vbs
计算机的“启动”文件夹中 - 以应用上述组策略设置的用户身份登录计算机
- 确认屏幕保护程序在 30 秒不活动后启动
- 解锁机器
- 断开计算机的网络接口卡
- 确认屏幕保护程序在几分钟不活动后不会启动
- 重新连接计算机的网卡
- 确认屏幕保护程序在 30 秒不活动后启动
- 注销以验证脚本不会“挂起”或以其他方式干扰注销过程
在 Windows 8.1 x64 机器上,该脚本完全按照我的要求执行。
Option Explicit
' Delay, in seconds, between attempts to resolve the domain name
' and pressing the "F15" key.
Const POLL_DELAY = 10
Dim objShell
Set objShell = WScript.CreateObject("WScript.Shell")
Dim objExec
Dim intFound
If UCase(Right(WScript.Fullname, 11)) = "WSCRIPT.EXE" Then
While 1
intFound = objShell.Run("cscript.exe """ & WScript.ScriptFullName & """", 0, True)
If intFound = 255 Then objShell.SendKeys("{F15}")
WScript.Sleep(POLL_DELAY * 1000)
Wend
Else
Set objExec = objShell.Exec("nslookup " & objShell.ExpandEnvironmentStrings("%USERDNSDOMAIN%"))
While Not objExec.StdOut.AtEndOfStream
If Left(objExec.StdOut.ReadLine, 5) = "Name:" Then WScript.Quit(0)
Wend
WScript.Quit(255)
End If
答案2
处理此问题的典型方法是为定义为“远程”工作者的用户或机器制定一套单独的策略。例如,我们有一个名为 OU,Remote Laptop Users
允许这些用户更好地控制显示和电源设置,原因就在于此。(如果您不想或无法更改这些对象所在的 OU,您也可以使用 WMI 过滤或安全过滤来实现相同的结果)。
如果你能让用户使用演示设置Evan Anderson 建议的工具,这很棒,但我的经验是,抱怨此类事情的用户也是那些不会动手解决问题的用户,并期望 IT 部门为他们解决问题,因此您可能最终不得不使用不同的 GPO 为他们解决问题。