我当前以管理员身份登录系统,并运行 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 访问权限更改为禁用。
尝试模拟用户对 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任务的命令已终止。