gpt4 book ai didi

作为提升用户的 Python 子进程脚本

转载 作者:行者123 更新时间:2023-12-05 07:49:16 25 4
gpt4 key购买 nike

我正在尝试使用 python 触发一个 Powershell 脚本,当我从我的 Powershell 连接(默认为“以管理员身份运行”)运行它时,该脚本运行良好。但是,当从 python 界面启动时,它会给我一个权限被拒绝的错误。这是我尝试运行的一些代码的片段,这些代码在由 Python 启动时失败,但在通过 powershell 提示符启动时失败。

elif "!ExchangeCheck" in message:
response = subprocess.Popen("powershell -ExecutionPolicy Unrestricted -File C:\users\.....\code\servicecheck.ps1", shell=True, stdout=subprocess.PIPE).stdout.read()
status = "Exchange services are: \n"
for line in thing:
if "Microsoft Exchange" in response:
status += line
print status

希望找到一种方法来使用 Popen 或类似 paramiko 的 powershell,它会尝试“以管理员身份运行”或至少在尝试运行时使用我的 native 权限?

更新:我已验证我的 python 脚本正在以管理员用户身份运行。

更新 2:我认为解决方案是使用 runas 命令运行脚本来增加所需的目标,但我不知道这是否是做事的“好”方法,它似乎不太理想。

最佳答案

如果您尝试调用具有足够权限的子进程怎么办?我认为 ctypes 库可以帮助您完成该任务(只需尝试这个装饰器)

def elevate_process(funct):
"""
Decorator to elevate privileges of a function on windows systems, it will create a sub process with administration privileges when the wrapper detects there is not enough privileges.
"""
import sys
def wrapper(*args, **kwargs):
import ctypes
import subprocess
validation = ctypes.windll.shell32.IsUserAnAdmin()
if validation == 1:
return funct(*args, **kwargs)
else:
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
return wrapper

关于作为提升用户的 Python 子进程脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37553886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com