繁体   English   中英

从Python调用PowerShell脚本

[英]Invoking a PowerShell script from Python

我正在尝试从python这样启动PowerShell脚本:

psxmlgen = subprocess.Popen([r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe',
                             './buildxml.ps1',
                             arg1, arg2, arg3], cwd=os.getcwd())
result = psxmlgen.wait()

问题是我得到以下错误:

无法加载文件C:\\ Users \\ sztomi \\ workspace \\ myproject \\ buildxml.ps1,因为在此系统上禁用了脚本的执行。 请参阅“获取有关about_signing的帮助”以了解更多详细信息。

尽管事实上我很早以前确实在管理员运行的PS终端中通过键入Set-ExecutionPolicy Unrestriced启用了Powershell中运行的脚本的事实(然后再做一次,只是为了确保)。 powershell可执行文件与开始菜单中的快捷方式所指向的可执行文件相同。 无论我是否以管理员身份运行PowerShell, Get-ExecutionPolicy正确报告Unrestricted

如何从Python正确执行PS脚本?

首先, Set-ExecutionPolicy Unrestriced是基于每个用户和每个位(32位与64位不同)的。

其次,您可以从命令行覆盖执行策略。

psxmlgen = subprocess.Popen([r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe',
                             '-ExecutionPolicy',
                             'Unrestricted',
                             './buildxml.ps1',
                             arg1, arg2, arg3], cwd=os.getcwd())
result = psxmlgen.wait()

显然,您可以使用以下路径从32位PowerShell访问64位PowerShell(感谢@eryksun):

powershell64 = os.path.join(os.environ['SystemRoot'], 
    'SysNative' if platform.architecture()[0] == '32bit' else 'System32',
    'WindowsPowerShell', 'v1.0', 'powershell.exe')

对于我们这些想知道在传递给powershell之后如何显示arg1,arg2和arg3的值的人,您要做的就是:

Write-Host $args[0]
Write-Host $args[1]
Write-Host $args[2]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM