windows - 批处理脚本、Powershell 和不触发 Windows 中的 UAC

标签 windows scripting powershell batch-file uac

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

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

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

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

  1. 完全禁用 UAC - 我们通常会这样做,但我们可能会遇到无法禁用它的某些情况。

  2. 为我们希望在提升模式下运行的批处理文件创建一个快捷方式。转到快捷方式的属性 > 快捷方式选项卡 > 高级 > 勾选“以管理员身份运行”

    • 此解决方案似乎可行,但快捷方式的初始运行会导致出现 UAC 提示。在批处理文件中运行的所有命令都不会导致 UAC 提示。接近解决方案,但最好不要得到任何提示。

3。 使用“runas”命令运行批处理文件。

  • 我已经尝试过了,但它仍然无法实现阻止 UAC 提示的提升。
  • 另外,使用 echo 'password' | runas ..... 提供密码的方法似乎不正确,所以我总是不得不输入密码。

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

据我所知,除了禁用 UAC 之外,没有其他办法绕过它。但我只是想看看是否有人能够就此主题提供更多信息。

谢谢,

干杯

最佳答案

没有正式的方法可以绕过应用程序的 UAC 提示。如果您有帐户密码(与 runas 方法相同),则有几种方法可以作为 administrator 运行程序。

您可以使用以下 Power-Shell 脚本以 administrator 身份启动您的程序,而无需询问密码:

您需要将用户密码作为安全字符串保存在某处:

$pass = Read-Host -AsSecureString
ConvertFrom-SecureString $pass | out-file pass.txt

然后您可以使用存储的密码以管理员的身份运行该文件:

$pass = import-SecureString (get-content pass.txt)
$startinfo = new-object System.Diagnostics.ProcessStartInfo
$startinfo.UserName = "administrator"
$startinfo.Password = $pass
$startinfo.FileName = "your batch script file name"
$startinfo.UseShellExecute = $true
[System.Diagnostics.Process]::Start($startinfo)

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

相关文章:

python - 将 python 脚本作为命令行变量运行

powershell - 在PowerShell中解析 'query user'的更简单方法

powershell - 我可以在 Powershell 中创建一个带有 [alias ("db")] 参数的脚本吗?

sorting - 在以 'n' 开头的数组中查找用户名

windows - Powershell 中的流水线字符串

windows - 当父进程被杀死/完成时如何保持子进程处于事件状态(在Windows中)

c++ - Qt QScriptEngine 和从 Qt 脚本到 C++ 的默认转换

c - 有没有办法快速找到Windows操作系统中隐藏的进程?

windows - 使用 WiX 安装时启动外部服务

windows - 内存映射文件是线程安全的吗