我正在寻找以提升模式(runas 管理员)运行批处理文件,以便它不会触发 UAC 提示用户交互。我们在登录脚本中进行了一些注册表编辑,这些脚本会触发 UAC 提示运行的每个注册表。

我意识到这种违背了 UAC 的目的,但是如果有某种方法可以在启用了 UAC 的机器上运行批处理文件,那就太好了。

这些批处理文件需要能够在没有任何用户交互的情况下运行(它们主要是登录脚本和一些管理脚本)。我们没有使用 Active Directory 域,因此希望有一个针对无 AD 域的解决方案。

到目前为止,我找到的解决方案如下:

  • 完全禁用 UAC - 我们通常会这样做,但我们可能会遇到一些无法禁用它的情况。
  • 创建我们希望以提升模式运行的批处理文件的快捷方式。转到快捷方式的属性 > 快捷方式选项卡 > 高级 > 勾选“以管理员身份运行”
  • 此解决方案似乎有效,但是快捷方式的初始运行会导致出现 UAC 提示。在批处理文件中运行的所有命令都不会导致 UAC 提示。接近解决方案,但最好不要收到任何提示。

  • 3.
    使用“runas”命令运行批处理文件。
  • 我已经尝试过这个,但是它仍然没有看到提升以防止 UAC 提示。
  • 另外,使用 echo 'password' | runas ..... 提供密码的方法似乎不起作用,所以我总是不得不输入密码。

  • 我在想但我还没有真正研究过的另一件事是,powershell 脚本在启用 UAC 的环境中运行/工作得更好吗? Windows 是否“信任”经过认证的 powershell 脚本并允许它们在不触发 UAC 的情况下不受阻碍地运行?

    从我读到的内容来看,除了禁用 UAC 之外,这些都无法绕过 UAC。但我只是想看看是否有人能够对这个话题有更多的了解。

    谢谢,

    干杯

    最佳答案

    当前用户有权访问的注册表操作本身不会触发 UAC 提示。

    但是,如果以未提升的管理员身份运行,则使用具有需要提升的 list 的应用程序会提示。

    您是否尝试使用 regedit.exe 执行批处理操作?如果是这样,请替换为 reg.exe (使用 cmd.exe )或者更好的是 PowerShell 的内置注册表支持。

    例如。

    get-itemproperties 'HKLM:\SOFTWARE\Classes\Folder'
    

    不需要提升(因为每个人都可以读取该 key ),但是在该 key 上设置属性将需要提升 PSH session 。

    另一种方法,如果您正在执行需要管理访问权限的操作(需要修改对某些对象的访问权限,ACL 将修改限制为管理员)。或者,在没有输入管理员帐户凭据的情况下,非管理员永远无法执行 UAC 或不执行某些操作。

    考虑使用任务计划程序:触发用户登录但在特定提升的管理员帐户下配置。

    总结:确实需要至少详细了解您正在做的一件会触发 UAC 的事情。

    关于windows - 批处理脚本、Powershell 和不触发 Windows 中的 UAC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6176664/

    10-15 17:47