如何从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
相关产品推荐
相关产品推荐

