从Python调用时将参数传递给PowerShell脚本

时间:2016-06-22 22:26:31

标签: python function powershell parameter-passing

从python我想调用一个powershell脚本并将参数传递给它

此处列出了Powershell函数标头:

Function Invoke-Neo4j
{
  [cmdletBinding(SupportsShouldProcess=$false,ConfirmImpact='Low')]
  param (
    [Parameter(Mandatory=$false,ValueFromPipeline=$false,Position=0)]
    [string]$Command = ''
  )

Python - 如何将参数$ Command ='start'从python传递给函数?我似乎无法让它发挥作用。

import subprocess
cmd = ['powershell.exe', '-ExecutionPolicy', 'RemoteSigned', '-File',
       'C:\\PathName\\Invoke-Neo4j.ps1']
returncode = subprocess.call(cmd)
print(returncode)

2 个答案:

答案 0 :(得分:0)

我无法通过Python使Powershell命令工作。我实际上找到了一个带有命令的.bat文件。我刚刚插入了'start'参数,我从python中调用了bat文件。它就像一个魅力。这不是最佳选择,但它可以帮助我。

SETLOCAL
Powershell -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Bypass -Command "try { Unblock-File -Path '%~dp0Neo4j-Management\*.*' -ErrorAction 'SilentlyContinue' } catch {};Import-Module '%~dp0Neo4j-Management.psd1'; Exit (Invoke-Neo4j 'start')"
EXIT /B %ERRORLEVEL%

答案 1 :(得分:0)

在PowerShell或Python中运行仅定义函数但不调用它的脚本除了定义函数之外没有其他效果。该脚本需要包含对该函数的特定调用。在您的情况下,您可以将逻辑放在脚本的顶层而不是函数内部然后调用该函数。这看起来像是:

[cmdletBinding(SupportsShouldProcess=$false,ConfirmImpact='Low')]
param (
    [Parameter(Mandatory=$false,ValueFromPipeline=$false,Position=0)]
    [string]$Command = ''
)
# rest of code not surrounded by { }
exit 0

像你最初那样从Python调用修改后的脚本,它应该可以正常工作。