Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Run PowerShell function from Python script

I have a need to run a PowerShell function from a Python script. Both the .ps1 and the .py files currently live in the same directory. The functions I want to call are in the PowerShell script. Most answers I've seen are for running entire PowerShell scripts from Python. In this case, I'm trying to run an individual function within a PowerShell script from a Python script.

Here is the sample PowerShell script:

# sample PowerShell Function hello {     Write-Host "Hi from the hello function : )" }  Function bye {     Write-Host "Goodbye" }  Write-Host "PowerShell sample says hello." 

and the Python script:

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) 

So, somehow, I want to run the 'hello()' or the 'bye()' function that is in the PowerShell sample. It would also be nice to know how to pass in parameters to the function. Thanks!

like image 725
H_H Avatar asked Jan 24 '13 19:01

H_H


People also ask

How do I run PowerShell from Python?

Here is the complete file. import subprocess def run(self, cmd): completed = subprocess. run(["powershell", "-Command", cmd], capture_output=True) return completed if __name__ == '__main__': hello_command = "Write-Host 'Hello Wolrd! '" hello_info = run(hello_command) if hello_info.

Can Python interact with PowerShell?

Open the integrated PowerShell terminal in VS CodeVS Code contains a built-in terminal that enables you to open a Python command line with PowerShell, establishing a seamless workflow between your code editor and command line.

How does Python connect to PowerShell?

Sometimes you install Python on Windows and it doesn't configure the path correctly. Make sure you enter [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User") in PowerShell to configure it correctly. You also have to either restart PowerShell or your whole computer to get it to really be fixed.


1 Answers

You want two things: dot source the script (which is (as far as I know) similar to python's import), and subprocess.call.

import subprocess subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe", ". \"./SamplePowershell\";", "&hello"]) 

so what happens here is that we start up powershell, tell it to import your script, and use a semicolon to end that statement. Then we can execute more commands, namely, hello.

You also want to add parameters to the functions, so let's use the one from the article above (modified slightly):

Function addOne($intIN) {     Write-Host ($intIN + 1) } 

and then call the function with whatever parameter you want, as long as powershell can handle that input. So we'll modify the above python to:

import subprocess subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe", ". \"./SamplePowershell\";", "&addOne(10)"]) 

this gives me the output:

PowerShell sample says hello. 11 
like image 117
Adam R. Grey Avatar answered Sep 21 '22 05:09

Adam R. Grey