首页 文章

批量脚本,Powershell,而不是在Windows中触发UAC

提问于
浏览
4

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

我意识到这种方式违背了UAC的目的,但如果在启用了UAC的计算机上运行批处理文件有一些方法,那就太好了 .

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

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

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

  • 创建我们希望在提升模式下运行的批处理文件的快捷方式 . 转到快捷方式>快捷方式选项卡>已添加>关闭“以管理员身份运行”的属性

  • 此解决方案似乎有效,但是快捷方式的初始运行会导致UAC提示出现 . 批处理文件中运行的所有命令都不会导致UAC提示 . 接近解决方案,但不提出任何提示会很好 .

3.使用'runas'命令运行批处理文件 .

  • 我试过这个,但它仍然没有看到达到提升以防止UAC提示 .

  • 另外,使用echo 'password' | runas .....方法提供的密码似乎不正常,所以我总是要输入密码 .

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

从我所看到的,这些是围绕UAC的其他方法,然后禁用它 . 但我只是想看看是否有人能够对这一主题有所了解 .

谢谢,

干杯

3 回答

  • 1

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

    但是,如果作为未提升的管理员运行,则使用具有需要提升的清单的应用程序将提示 .

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

    例如 .

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

    不需要提升(因为每个人都可读取该键),但在该键上设置属性将需要提升的PSH会话 .


    另一种方法,如果您正在执行需要管理访问的操作(需要使用ACL修改对某些对象的访问权限,以限制对管理员的修改) . 或者,如果没有输入管理员帐户的凭据,非管理员永远不会做UAC的事情 .

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

    总结:确实需要知道至少有一件你正在做的事情,它们会详细触发UAC .

  • 6

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

    您可以使用以下 Power-Shell 脚本以 administrator 启动您的程序而无需输入密码:

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

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

    然后,您可以使用存储的密码以这种方式将文件作为 administrator 运行:

    $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)
    
  • 3

    设置将运行升级的计划任务在设置时需要一次同意,而不再需要 . 由于您提到这些是登录脚本,因此在登录时运行的计划任务应该完全满足您的需求 .

相关问题