当前位置: 首页 > 面试题库 >

从Python脚本运行PowerShell函数

田鹤轩
2023-03-14
问题内容

我需要从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


 类似资料:
  • 每次在PostgreSQL表上执行更新或插入操作时,我都会遇到一个“小”问题。 此脚本将提取并写入更新或插入的数据文件。 环境数据:Ubuntu 18.04(仿生海狸)、PostgreSQL 10和Python 3.6 和输出 我创建了一个PostgreSQL函数(我希望它在所有留档读数后都可以) 在此之后,创建触发器 如果我正在进行任何插入或更新,则不会发生任何事情。 作为额外的预防措施,我做了

  • 问题内容: 我正在编写一个python脚本,该脚本可以检查各种条件并相应地运行powershell脚本,以帮助我自动完成从Windows XP到Windows 7的迁移。powershell脚本提供了自己的输出,可让用户了解发生的情况。我想获取powershell脚本的输出并将其打印为python脚本的输出。我环顾了一些问题,这些问题似乎想做同样的事情,但似乎对我没有帮助。最初我尝试使用 如此处的

  • 问题内容: 我正在尝试从python这样启动PowerShell脚本: 问题是我得到以下错误: 无法加载文件C:\ Users \ sztomi \ workspace \ myproject \ buildxml.ps1,因为在此系统上禁用了脚本的执行。请参阅“获取有关about_signing的帮助”以了解更多详细信息。 尽管事实上我很早以前确实通过键入管理员运行的PS终端来启用Powersh

  • 问题内容: 我想从PHP运行Python脚本。该脚本的语法很好,当我从命令行运行它时,它会在它旁边生成一个图像文件。当我从命令行运行PHP文件(包含Python exec)时,它将生成一个图像文件。很好。问题是:当我使用浏览器并运行PHP时,它不会生成任何图像文件。我使用的是Xubuntu OS。 问题答案: 问题是matplotlib后端设置。我更改为“ Agg”,并且plot函数正常运行。

  • 问题内容: 我一直在网上和Stackoverflow上浏览,但是没有找到这个问题的答案。您将如何从Node.js执行Powershell脚本?该脚本与Node.js实例位于同一服务器上。 问题答案: 您可以仅生成一个子进程“ powershell.exe”,并侦听stdout的命令输出和stderr的错误:

  • 问题内容: 如何从“脚本” 执行PowerShell ps1脚本? 我知道如何在package.json“ scripts”中设置基本脚本。例如,使用以下配置,我可以执行该命令,该命令将向控制台输出“这仅仅是测试”: 但是,我有一个更高级的场景,我想执行一个PowerShell脚本。像这样: 我可以通过scripts对象执行这样的ps1脚本吗?是否需要任何特殊的设置/配置?还有其他限制吗? 问题答