Übergeben Sie das Argument, wenn Sie ein Skript über die Befehlszeile ausführenIch habe ein JMP-Skript, das als Teil eines größeren, in PowerShell geschriebenen Skripts ausgeführt wird.
Ich starte das JMP-Skript mit
Start-Process -FilePath $JMP_path -ArgumentList ("`""+$JMPScriptPath+"`"") -WaitIch möchte einem Skript ein zusätzliches Argument übergeben – nur eine Textzeichenfolge.
Wie mache ich das?
Ich habe versucht, es einfach in eine Umgebungsvariable zu schreiben, aber während JMP es problemlos lesen kann, wenn es als Standalone-Version ausgeführt wird, kann es es nicht lesen, wenn JMP in PowersShell gestartet wird. Ich möchte auch vermeiden, diese Zeichenfolge aus einem Powershell-Skript in eine Datei zu schreiben, nur um sie dann aus einem JSL-Skript zu lesen. Gibt es vielleicht eine Möglichkeit, diese Zeichenfolge an das Skript zu übergeben? Oder sollte ich Start-Process vielleicht anders verwenden, damit JMP die Umgebungsvariable lesen kann?
Automatisierung und SkripterstellungBetreff: Übergeben Sie das Argument, wenn Sie ein Skript über die Befehlszeile ausführenIch habe es tatsächlich so eingerichtet:
[System.Environment]::SetEnvironmentVariable('scriptArg', 'Hello From PowerShell', 'User')...nur weil, soweit ich weiß, wenn Sie es so einrichten:
$Env:ScriptArg = "Hello from PowerShell";
Es bleibt nicht über die Powershell-Sitzung hinaus bestehen, und als ich es mithilfe der Windows-Tools getestet habe, ist mir ein seltsames Verhalten aufgefallen. Allerdings brauche ich es nicht einmal, um über die Sitzung hinaus bestehen zu bleiben – innerhalb der Sitzung ist das völlig in Ordnung, daher werde ich wahrscheinlich zu Ihrer (und meiner ursprünglichen) Option zurückkehren, nachdem ich es jetzt erneut getestet habe.
Danke!
Betreff: Übergeben Sie das Argument, wenn Sie ein Skript über die Befehlszeile ausführenKönnen Sie uns zeigen, wie Sie die Umgebungsvariable festlegen?
Das funktioniert bei mir:
startjmp.ps1:
$JMP_Path = "C:\Program Files\SAS\JMPPRO\15\jmp.exe"
$JMPScriptPath = "C:\util\test.jsl";
$Env:ScriptArg = "Hello from PowerShell";
Start-Process -FilePath $JMP_Path -ArgumentList ("`""+$JMPScriptPath+"`"") -Wait
test.jsl:
Open Log();
myvar = Get Environment Variable("ScriptArg");
print(myvar);
Startjmp von PS gestartet
Protokollausgabe in JMP:
Open Log();
myvar = Get Environment Variable("ScriptArg");
print(myvar);
/*:
"Hello from PowerShell"
Danke für den Ping @Craige_Hales
Betreff: Übergeben Sie das Argument, wenn Sie ein Skript über die Befehlszeile ausführen@jschroedl
Betreff: Übergeben Sie das Argument, wenn Sie ein Skript über die Befehlszeile ausführenJa, ich habe diesen Beitrag gesehen. Wie gesagt, JMP kann aus irgendeinem Grund keine Umgebungsvariablen lesen, wenn es über ein Powershell-Skript gestartet wird.Betreff: Übergeben Sie das Argument, wenn Sie ein Skript über die Befehlszeile ausführenMehr oder weniger die gleiche Idee:
Jmp.exe-Argumente
Betreff: Übergeben Sie das Argument, wenn Sie ein Skript über die Befehlszeile ausführenOK,
Ich mache es vorerst so:
'myVariable = "{0}";' -f $variableToPassToJMP | Out-File "./paths.jsl"
Start-Process -FilePath $JMP_path -ArgumentList ("`""+$JMPScriptPath+"`"") -Wait
Remove-Item -Path "./paths.jsl" -Force -Confirm:$falseNicht sehr elegant, aber funktioniert
Aktualisiert: Oh, im JSL-Skript selbst mache ich einfach Folgendes:
Include("paths.jsl");