【问题标题】:Check UAC status检查 UAC 状态
【发布时间】:2012-07-01 21:17:19
【问题描述】:

如何编写一个批处理文件来运行检查是否启用了 UAC:

REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA

如果结果为:则启用:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System EnableLUA    REG_DWORD    **0x1**)

如果结果为以下则禁用:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System EnableLUA    REG_DWORD    **0x0**)

然后脚本应该根据结果运行不同的命令。

【问题讨论】:

    标签: batch-file uac


    【解决方案1】:

    您可以简单地使用FINDFINDSTR 搜索一个或另一个值,然后根据搜索结果调用命令。模式基本上是这样的:

    REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA | (
      FIND "0x1" >NUL
    ) && (
      command(s)_to_run_when_UAC_is_enabled
    ) || (
      command(s)_to_run_when_UAC_is_disabled
    )
    

    REG 产生一个输出,该输出使用“管道”(|) 传递到FIND 的输入。 FIND 在其输入中查找 0x1,并根据搜索结果执行以下括号中的命令块之一。

    command && command || command 是一种允许您有选择地运行命令的标准机制,是IF 的一种替代。第一个命令产生一个结果。如果结果为“成功”,则运行&& 之后的命令,如果失败,则运行|| 之后的命令。

    如果您需要在两种情况下都执行操作,请在生成结果的命令后同时使用&&||,但如果只对一种结果做出反应,您可以省略&&||.

    【讨论】:

    • 感谢您的详尽描述!我尝试执行此操作,但它似乎对我不起作用。例如我试过:REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA | ( FIND "0x1" >NUL ) && ( shutdown -t 0 -r -f ) || ( command(s)_to_run_when_UAC_is_disabled ) 我的 UAC 已启用,但我的电脑没有关机,我做错了什么?谢谢转发! :)
    • 不确定是什么问题,抱歉。这是一个复杂的命令,因此建议首先调试每个部分:确保REG 返回您期望的结果,然后查看FIND 是否找到指定的术语(即尝试在没有>NUL 的情况下运行它看看它是否显示正在搜索的行。接下来,尝试在&&|| 之后使用ECHO,而不是shutdown 以及您想要的任何其他命令。
    • 我系统中的 UAC 已禁用,在我运行此命令后:REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA | FIND "0x1" >NUL && ( ECHO OK ) || (shutdown -t 30 -r -f),我收到一条通知,计划在不到一分钟的时间内重新启动,这意味着它按预期工作。我目前无法使用-t 0 对其进行测试,因此无法确定在上述复合命令中运行shutdown -t 0 是否有任何限制。
    • 太棒了,这次成功了,非常感谢! :) 顺便说一下,如何在 () 中插入更长的 sn-ps 代码?现在我只是使用“调用”功能来运行另一个 .bat 文件。但是可以在那些()中输入更长的代码吗?我不确定我是否解释得很好:D 你知道我的意思吗?
    • 我认为您正在谈论在括号(或括号)之间插入更多命令。如果我的猜测是正确的,那么答案是“是的,你可以做到这一点”。这就是我在模板中写command(s) 的原因,这意味着它可以是单个命令或多个命令。但如果我的猜测是错误的,请告诉我你的实际意思。
    【解决方案2】:

    查看有关 EnableLUA here 的 Microsoft 文档:

    @echo off
    for /f "skip=2 tokens=3" %%a in ('reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA') do if "%%a" equ "0x0" (
    rem When UAC is disabled
    ) ELSE (
    rem When UAC is enabled
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 2018-11-24
      • 2022-01-19
      相关资源
      最近更新 更多