以管理员身份在提升模式下运行另一个 Power shell 脚本

问题描述 投票:0回答:1

我当前以管理员身份登录系统,并运行 power1.ps1 代码以提升模式调用另一个 power2.ps1 脚本。

$command = "C:\script\Power2.ps1"

调用表达式$命令

power2.ps1
包含以管理员权限运行脚本的块,但我的问题是我收到一个 UAC 弹出对话框,要求确认,我必须单击“是”。

Power2.ps1 中的代码

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))

{   
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}

Write-Host "Admin Privilege Code Here"

有什么方法可以完全自动化该过程吗?我将无法将 UAC 访问权限更改为禁用。

powershell uac powershell-remoting
1个回答
2
投票

尝试模拟用户对 UAC(用户帐户控制)对话框的响应不应该完成 - 因为它违背了 UAC 的全部目的 - 并且很可能不能完成(如果可以的话)完成后,这将是一个严重的 bug,可被恶意软件利用,并且肯定不是值得依赖的东西;同样,虽然可以 完全禁用 UAC (其本身需要管理权限),这样做是 强烈出于安全原因,不鼓励)。

使用 UAC 后,直接调用中避免出现 UAC 对话框的唯一方法是调用进程本身已经以提升运行(例如,如果它是使用 Run as administrator

快捷菜单命令启动的) .

但是,

有限制,您可以使用计划任务绕过UAC对于给定命令,通过按需调用该计划任务

    创建一个
  • 辅助

    计划任务,调用您的Power2.ps1脚本并配置为运行

    提升

      在任务计划程序 (
    • taskschd.msc

      ) UI 中,这意味着:必须选中

      Run with highest privilege
      (选项卡
      General
      )以及
      Allow task to be run on demand
      (选项卡
      Settings
      )。
      
      

    • 任务必须配置为在按需调用该任务的同一用户帐户中运行

      ,并且该用户帐户必须是Administrators

      的成员。

  • 使用

    Start-ScheduledTask <task-path>

    (或 
    schtasks.exe /Run /TN <task-path>)从配置该任务的
    same
    帐户按需调用此任务,如前所述。

    Start-ScheduledTask
      (以及
    • schtasks.exe /Run

      运行
      异步
      ,因此对于同步调用需要更多工作 - 请参阅本文
      
      请注意,使用 -AsJob

      返回可以使用
        Wait-Job
      • 等待其完成的作业,不幸的是,
        not
        无法提供帮助(从 Windows PowerShell 5.1 / PowerShell 7.2.1 开始):作业报告为已完成
        before
        任务的命令已终止。
      • 此外,任务的命令总是在
      新控制台窗口
    • 中运行(如果调用的可执行文件是控制台应用程序)。

© www.soinside.com 2019 - 2024. All rights reserved.