将变量从Python GUI传递到PowerShell

时间:2017-06-27 14:55:56

标签: python powershell

所以我创建的应用程序可以将打印机连接到在后台运行PowerShell脚本的Python GUI。我想知道是否有一种方法可以将从Python小部件输入的变量传递给Python调用的PowerShell脚本。这个变量是我可以在Python中指定的打印机的名称,这样我就不必为每台打印机创建单独的脚本。

我的Python代码调用了PS脚本:

def connect():               
        if self.printerOpts.get() == 'Chosen Printer':
            subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe",'-ExecutionPolicy','Unrestricted', '.\'./ScriptName\';'])

将打印机连接到计算机的PS脚本:

Add-Printer -ConnectionName \\server\printer -AsJob

基本上,我想知道我是否可以将Python中的变量传递到我的PS脚本的“打印机”部分,这样我就不必为每个要添加的打印机创建不同的脚本。

2 个答案:

答案 0 :(得分:3)

更好的方法是在PowerShell中完成,或在Python中完成。

你所追求的是可行的。您可以通过确保PowerShell脚本期望变量来传递它,就像传递-ExecutionPolicy Unrestricted一样。

我的Python是不存在的,所以如果该部分不起作用,请耐心等待。

<强>的Python

myPrinter # string variable in Python with printer name
subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe",'-ExecutionPolicy','Unrestricted', '.\'./ScriptName\';','-printer',myPrinter])

<强>的PowerShell

param(
    $printer
)

Add-Printer -ConnectionName \\server\$printer -AsJob

答案 1 :(得分:0)

对我有用的方法是首先指定我在我的PS脚本中将变量作为字符串传递:

param([string]$path)

Add-Printer -ConnectionName \\server\$path

我的PS脚本没想到这个变量。在我的Python脚本中,我必须首先定义my变量,将path命名为字符串,然后在子进程函数的末尾输入“path”。

        path = "c"
        subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe",'-ExecutionPolicy','Unrestricted', 'Script.ps1', path])