2017-06-27 1 views
2

Ich erstelle also eine Anwendung, die Drucker mit einer Python-GUI verbinden kann, auf der PowerShell-Skripte im Hintergrund ausgeführt werden. Ich habe mich gefragt, ob es eine Möglichkeit gibt, eine von einem Python-Widget eingegebene Variable an ein PowerShell-Skript zu übergeben, das von Python aufgerufen wird. Diese Variable wäre der Name des Druckers, den ich in Python angeben könnte, so dass ich für jeden Drucker keine separaten Skripte erstellen muss.Übergabe von Variablen aus der Python-GUI an PowerShell

in Python Meinen Code, der auf dem PS-Skript ruft:

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

PS-Skript, den Drucker Computer verbindet:

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

Im Grunde frage ich mich, wenn ich eine Variable von Python passieren kann in den "printer" -Teil meines PS-Skripts, damit ich für jeden Drucker, den ich hinzufügen möchte, kein anderes Skript erstellen muss.

Antwort

3

Eine bessere Möglichkeit, dies zu tun, wäre vollständig in PowerShell oder komplett in Python.

Was Sie suchen, ist machbar. Sie können es auf die gleiche Weise übergeben, wie Sie -ExecutionPolicy Unrestricted übergeben haben, indem Sie sicherstellen, dass das PowerShell-Skript die Variable erwartet.

Meine Python ist nicht existent, also bitte mit, wenn dieser Teil nicht funktioniert.

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 
+0

Danke gmss0ulman. Ich konnte die Änderungen anwenden, aber PowerShell gibt einen Fehler "Der angegebene Server existiert nicht" und der Drucker fügt nicht mehr hinzu. – JDawg

+0

@JDawg Hmm .. wie sieht die Zeichenfolge aus, die Sie an PowerShell übergeben? Vielleicht sollte es nur '$ printer' anstelle von' \\ server \ $ printer' sein. – gms0ulman

+0

@ gmss0ulman Ich habe dein PS-Skript benutzt und einige andere Änderungen am Python-Skript vorgenommen und es hat funktioniert. Ich habe meine Antwort auf die Frage gepostet, ob Sie neugierig sind. Ich danke dir sehr! – JDawg

0

Die Art und Weise, die für mich war zunächst angeben gearbeitet, dass ich eine Variable als String in meinem PS Skript vorging:

param([string]$path) 

Add-Printer -ConnectionName \\server\$path 

Mein PS-Skript hat diese Variable nicht erwartet. In meinem Python-Skript musste ich zuerst meine Variable definieren, die Pfad als String bezeichnete und dann "Pfad" in das Ende meiner Subprozessfunktion eingab.

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