PythonスクリプトからPowerShell関数を実行する必要があります。現在、.ps1ファイルと.pyファイルは同じディレクトリに存在します。呼び出す関数はPowerShellスクリプトにあります。私が見たほとんどの答えは、PythonからPowerShellスクリプト全体を実行することです。この場合、PowerShellスクリプト内の個々の関数をPythonスクリプトから実行しようとしています。
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()'関数を実行したいと思います。また、関数にパラメーターを渡す方法を知っているといいでしょう。ありがとう!
2つのものが必要です: ドットソーススクリプト (これは(私の知る限り)pythonのインポートに似ています)、および 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