windows-server-2008 – 如何在不在域上时规避或更改屏幕超时组策略?

前端之家收集整理的这篇文章主要介绍了windows-server-2008 – 如何在不在域上时规避或更改屏幕超时组策略?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我被要求为我们的远程笔记本电脑用户寻找解决方案,他们试图在客户现场进行Powerpoint和Excel演示.我们正在运行Server 2008 / Win 7环境.我们有一个组策略,在5分钟不活动后锁定每个人的PC并需要密码才能重新登录.我被问到是否可以在笔记本电脑用户登录时更改此设置,但不在域上本地.他们希望能够调整它,以便在用PP,Word或Excel进行演示时屏幕不会锁定.据我所知,在全屏模式下屏幕保护程序可以使用powerpoint diable,但我不知道如何使用其他程序实现这一点.我尝试在笔记本电脑上查看演示模式,但由于组策略,“禁用屏幕保护程序”的设置显示为灰色.有任何想法吗?谢谢.
我已经能够向自己证明我最初建议的presentationsettings工具“尊重”阻止用户更改其屏幕保护程序的组策略设置.我没有意识到这种行为,但它肯定是有道理的,因为当没有任何与演示相关的事情发生时,用户只会使用此工具来免除屏幕保护程序.

正如@ HopelessN00b所提到的,您可能想要更改组策略,因为它适用于“远程”笔记本电脑.您需要调用Loopback Policy Processing,因为屏幕保护程序设置是每个用户,而不是每台计算机.环回策略处理允许您将用户设置应用于计算机,而不管登录用户如何.

不幸的是,这个功能让很多人感到困惑.它有几种不同的“模式”(合并与替换),使其更加混乱.对于您的应用程序,您可以创建一个GPO链接到一个hyhothetical“Remote Laptop Comptuers”OU,它在“计算机配置”部分的“合并”模式下启用环回策略处理,并在其“用户配置”部分设置屏幕保护程序任何你想要的属性.当下一台机器重新启动时(因为从非环回切换到环回需要重启 – 后台策略刷新不会启用它),您将看到机器开始从这个新GPO中获取屏幕保护设置.

编写某种hackish客户端服务程序以进入用户注册表并切换组策略屏幕保护程序限制值(因为用户注册表权限无法自行执行),我认为你陷入困境您将不得不选择较小的邪恶并禁用笔记本电脑上的用户的屏幕保护程序限制,使用某些第三方“鼠标摇杆”或键盘模拟软件,或只是告诉用户住在一起的情况它.

编辑:

有许多第三方程序可以做你正在寻找的东西,但只有内置的OS组件做一些“优雅”.

这里有一个小的VBScript程序,适合wscript.exe执行(意味着你可以将这个w / Group Policy Preferences直接部署到计算机的“Startup”文件夹中),它应该可以做你正在寻找的东西,假设你的域名的DNS名称无法在网络外部解析. (如果能够在外部解决,坦白说,你得到了你应得的.)

此脚本位于轮询循环中,使用nslookup解析USERDNSDOMAIN环境变量中指定的域.它每10秒轮询一次,但您可以通过更改Const POLL_DELAY行来修改它. (再次执行自身的奇怪回转是必要的,因为如果只通过wscript.exe执行,每个轮询间隔会短暂出现一个窗口 – 根本不是一件好事.)

当域名未解析时,“F15”键被“按下”,导致足够的活动,Windows将不会激活屏幕保护程序.

此脚本在Windows 8.1 x64上进行了测试,并且域用户具有应用于其中的组策略对象,其中包含管理模板设置:

>启用屏幕保护程序 – 已启用
>防止更改桌面背景 – 已启用
>防止更改屏幕保护程序 – 已启用
>密码保护屏幕保护程序 – 已启用
>屏幕保护程序超时 – 启用 – 30秒
>强制特定的屏幕保护程序 – 启用 – scrnsave.scr

我的测试方法如下:

>将名为ss.vbs的程序放入计算机的“Startup”文件夹中
>以应用了上述组策略设置的用户身份登录计算机
>确认在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 & """",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

猜你在找的Windows相关文章