我需要从Python脚本运行PowerShell函数。.ps1和.py文件当前都位于同一目录中。我要调用的函数在PowerShell脚本中。我看到的大多数答案都是关于从Python运行整个PowerShell脚本的。在这种情况下,我试图在Python脚本的PowerShell脚本中运行单个功能。
这是示例PowerShell脚本:
# sample PowerShell Function hello { Write-Host "Hi from the hello function : )" } Function bye { Write-Host "Goodbye" } Write-Host "PowerShell sample says hello."
和Python脚本:
import argparse import subprocess as sp parser = argparse.ArgumentParser(description='Sample call to PowerShell function from Python') parser.add_argument('--functionToCall', metavar='-f', default='hello', help='Specify function to run') args = parser.parse_args() psResult = sp.Popen([r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe', '-ExecutionPolicy', 'Unrestricted', '. ./samplePowerShell', args.functionToCall], stdout = sp.PIPE, stderr = sp.PIPE) output, error = psResult.communicate() rc = psResult.returncode print "Return code given to Python script is: " + str(rc) print "\n\nstdout:\n\n" + str(output) print "\n\nstderr: " + str(error)
因此,我想以某种方式运行PowerShell示例中的“ hello()”或“ bye()”函数。知道如何将参数传递给函数也很高兴。谢谢!
您需要两件事:点源脚本(据我所知)(类似于python的import)和subprocess.call。
import subprocess subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe", ". \"./SamplePowershell\";", "&hello"])
因此,这里发生的是我们启动powershell,告诉它导入脚本,并使用分号结束该语句。然后,我们可以执行更多命令,即hello。
您还想向函数中添加参数,因此让我们使用上一篇文章中的参数(稍作修改):
Function addOne($intIN) { Write-Host ($intIN + 1) }
然后只要Powershell可以处理该输入,就可以使用所需的任何参数调用该函数。因此,我们将上述python修改为:
import subprocess subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe", ". \"./SamplePowershell\";", "&addOne(10)"])
这给了我输出:
PowerShell sample says hello. 11