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

如何从Python以管理员身份向PowerShell发送命令及slmgr示例

以管理员权限从Python调用PowerShell执行命令的解决方案

1. 通用实现:从Python以管理员权限调用PowerShell

要在Python中以管理员权限执行PowerShell命令,核心是触发Windows的UAC权限提升机制,以下是两种可靠的实现方式:

方法一:利用PowerShell的Start-Process命令

通过Start-Process的-Verb RunAs参数请求管理员权限,这种方式简洁直观,依赖PowerShell环境:

import subprocess

def run_powershell_admin(command):
    # 构造带权限提升的PowerShell命令
    elevated_cmd = f"Start-Process powershell -ArgumentList '-Command \"{command}\"' -Verb RunAs"
    # 执行命令,check=True会在执行失败时抛出异常
    subprocess.run(["powershell", elevated_cmd], check=True)

方法二:直接调用Windows API(无PowerShell命令依赖)

通过ctypes调用Windows的ShellExecuteW API,直接请求管理员权限执行命令,更底层:

import ctypes
from ctypes import wintypes

# 初始化Windows API调用参数
ShellExecute = ctypes.windll.shell32.ShellExecuteW
ShellExecute.argtypes = [
    wintypes.HWND, wintypes.LPCWSTR, wintypes.LPCWSTR,
    wintypes.LPCWSTR, wintypes.LPCWSTR, wintypes.INT
]
ShellExecute.restype = wintypes.HINSTANCE

def run_admin_command(command):
    # 拼接完整的执行命令:通过cmd调用PowerShell执行目标指令
    full_cmd = f'powershell -Command "{command}"'
    # SW_SHOWNORMAL = 1,保持窗口可见
    result = ShellExecute(None, "runas", "cmd.exe", f"/c {full_cmd}", None, 1)
    # Windows API返回值大于32表示执行成功
    if result <= 32:
        raise RuntimeError(f"权限提升失败,错误码:{result}")

2. 执行指定的slmgr激活命令

针对你需要执行的slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX指令,直接调用上述方法即可:

使用方法一的示例:

import subprocess

slmgr_cmd = "slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX"
elevated_ps_cmd = f"Start-Process powershell -ArgumentList '-Command \"{slmgr_cmd}\"' -Verb RunAs"
subprocess.run(["powershell", elevated_ps_cmd], check=True)

使用方法二的示例:

import ctypes
from ctypes import wintypes

ShellExecute = ctypes.windll.shell32.ShellExecuteW
ShellExecute.argtypes = [
    wintypes.HWND, wintypes.LPCWSTR, wintypes.LPCWSTR,
    wintypes.LPCWSTR, wintypes.LPCWSTR, wintypes.INT
]
ShellExecute.restype = wintypes.HINSTANCE

slmgr_cmd = "slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX"
full_cmd = f'powershell -Command "{slmgr_cmd}"'
result = ShellExecute(None, "runas", "cmd.exe", f"/c {full_cmd}", None, 1)

if result <= 32:
    print(f"执行失败,错误码:{result}")
else:
    print("命令已提交执行,请查看系统激活状态确认结果")

注意事项

  • 执行时会弹出UAC授权窗口,需要用户手动确认(除非系统禁用了UAC,不推荐此操作)
  • slmgr命令执行后不会在控制台输出结果,需通过「设置-系统-激活」查看状态,或执行slmgr /xpr命令验证
  • 如果Python脚本本身已以管理员权限运行,UAC窗口不会弹出,命令直接执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:25:23