关于这个主题有很多话题,但是似乎对我的具体情况没有帮助。我通常不是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脚本可以正常工作。感谢所有指针。
答案 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代码。