【问题标题】:pass parameter to PowerShell script when calling from Python从 Python 调用时将参数传递给 PowerShell 脚本
【发布时间】:2016-10-25 01:24:24
【问题描述】:

我想从 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)

【问题讨论】:

  • 你的.ps1 文件定义了函数,但它调用了吗?
  • 它没有调用它。你会怎么称呼它?这就是我正在努力的部分

标签: python function powershell parameter-passing


【解决方案1】:

我无法通过 Python 使 Powershell 命令工作。我实际上找到了一个带有有效命令的 .bat 文件。我刚刚插入了“开始”参数,我从 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%

【讨论】:

    【解决方案2】:

    在 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 调用修改后的脚本,它应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 2015-06-07
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 2011-08-01
      • 2017-05-08
      • 2019-07-07
      • 1970-01-01
      相关资源
      最近更新 更多