如何以PowerShell中的参数作为管理员运行python脚本

时间:2019-06-26 10:08:29

标签: python windows powershell

关于这个主题有很多话题,但是似乎对我的具体情况没有帮助。我通常不是Windows用户,所以也许我缺少了一些东西。

我需要从单个Windows(2016)Powershell脚本运行带有参数的一系列python脚本。 python脚本必须以管理员身份运行(因为它们需要访问本地注册表)。

根据主题的其他主题,我已经做到了这一点:

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Unrestricted -File `"$PSCommandPath`"" -Verb RunAs; exit }


& python.exe V:Scripts\script.py --hostnames del rodney

这将以管理员身份启动一个子外壳,但是在运行python脚本时该子外壳会失败。在我有机会看到错误消息之前,该子外壳消失了,但是powershell事件日志显示“引擎状态从可用更改为已停止”,我认为这是权限错误。

如果直接从管理员Powershell运行,则python脚本可以正常工作。感谢所有指针。

1 个答案:

答案 0 :(得分:0)

您的代码正在检查当前的powershell会话是否以管理员身份运行,否则,它是否正在以管理员身份运行另一个会话。

但是您的python代码仍在初始Poweshell会话中运行(未以管理员身份运行)。

如下修改代码:

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
    Start-Process powershell.exe "-NoProfile -ExecutionPolicy Unrestricted -command ""python.exe V:Scripts\script.py --hostnames del rodney""" -Verb RunAs
} else {
    python.exe V:Scripts\script.py --hostnames del rodney
}

这将检查当前会话是否正在以管理员身份运行,它将直接运行python代码;如果不是,它将以管理员身份运行新的Powershell会话并在其中运行python代码。