You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python打开具备提升权限的PowerShell命令提示符

Python subprocess 调用PowerShell实现管理员权限运行方案

Windows 平台实现(UAC提权)

Windows系统下权限提升由系统UAC机制管控,无法通过代码静默绕过用户确认,需通过PowerShell内置的Start-Process加RunAs动词触发UAC提权流程,参考实现代码:

import subprocess

# 替换为需要高权限执行的实际命令
target_ps_command = "my command"

run_cmd = [
    "pwsh",
    "-NoProfile",
    "-Command",
    f"Start-Process pwsh -ArgumentList '-NoProfile','-Command','{target_ps_command}' -Verb RunAs -Wait"
]

subprocess.run(run_cmd)

参数说明

  • -NoProfile:可选参数,加了之后启动PowerShell时不加载用户配置文件,避免自定义配置干扰命令执行
  • -Verb RunAs:Windows系统注册的进程启动动词,触发UAC权限申请弹窗,用户确认后目标进程将获得管理员令牌
  • -Wait:让发起提权的父进程等待高权限PowerShell进程执行结束后再退出,不需要同步等待执行结果可移除该参数

注意事项

  • 执行时必然弹出系统级UAC确认窗口,不存在常规合法手段可以绕过该确认流程静默拿到管理员权限
  • 若待执行命令中包含单引号,需提前做转义处理:将命令内的所有单引号替换为两个连续单引号'',避免PowerShell参数解析错误
  • 提权启动的PowerShell进程默认工作目录为C:\Windows\System32,如果命令依赖相对路径,可给Start-Process追加-WorkingDirectory参数指定执行目录,示例:
run_cmd = [
    "pwsh",
    "-NoProfile",
    "-Command",
    f"Start-Process pwsh -ArgumentList '-NoProfile','-Command','{target_ps_command}' -Verb RunAs -Wait -WorkingDirectory 'D:\\your\\project\\path'"
]
  • 提权后的进程是独立的安全上下文,无法直接通过父进程subprocess的stdout/stderr管道捕获输出,需要获取执行结果时,可在高权限命令中将输出写入指定临时文件,父进程等待执行完成后读取文件内容即可。

Linux/macOS 平台实现

类Unix平台下PowerShell(pwsh)提权直接通过sudo实现即可:

import subprocess
subprocess.run(['sudo', 'pwsh', '-NoProfile', '-Command', 'my command'])

执行时会在当前终端提示输入用户密码,校验通过后将以root权限执行目标命令。

避坑提示

  • 不要为了省事给subprocess.run传shell=True执行提权命令,极易出现参数转义错误,还存在命令注入安全风险,按列表顺序传参是最稳妥的方式。

内容的提问来源于stack exchange,提问作者ISK2022

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:01:29