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

bou*_*rne 4 windows powershell scripting uac batch-file

我正在寻找远程以高架模式运行批处理文件(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的其他方法,然后禁用它.但我只是想看看是否有人能够对这一主题有所了解.

谢谢,

干杯

far*_*jad 6

没有正式的方法绕过UAC提示您的申请.有几种方法可以运行程序,administrator就像您拥有帐户密码一样(与runas方法相同).

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

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

$pass = Read-Host -AsSecureString
ConvertFrom-SecureString $pass | out-file pass.txt
Run Code Online (Sandbox Code Playgroud)

然后您可以像这样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)
Run Code Online (Sandbox Code Playgroud)