我正在寻找以提升模式(runas 管理员)运行批处理文件的方法,这样它就不会触发 UAC 以提示用户交互。我们在登录脚本中进行了一些注册表编辑,这会触发 UAC 提示运行的每个注册表。
我意识到这违背了 UAC 的目的,但如果有某种方法可以在启用了 UAC 的机器上运行批处理文件,那就太好了。
这些批处理文件需要能够在没有任何用户交互的情况下运行(它们主要是登录脚本和一些管理脚本)。我们没有使用 Active Directory 域,因此希望有针对非 AD 域的解决方案。
目前我找到的解决方案如下:
完全禁用 UAC - 我们通常会这样做,但我们可能会遇到无法禁用它的某些情况。
为我们希望在提升模式下运行的批处理文件创建一个快捷方式。转到快捷方式的属性 > 快捷方式选项卡 > 高级 > 勾选“以管理员身份运行”
- 此解决方案似乎可行,但快捷方式的初始运行会导致出现 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/