Passa l'argomento quando si esegue lo script dalla riga di comandoHo uno script JMP che viene eseguito come parte di uno script più ampio scritto in PowerShell.
Avvio lo script JMP utilizzando
Start-Process -FilePath $JMP_path -ArgumentList ("`""+$JMPScriptPath+"`"") -WaitVorrei passare un argomento aggiuntivo a uno script: solo una stringa di testo.
Come lo faccio?
Ho provato semplicemente a scriverlo in una variabile ambientale, ma mentre JMP può leggerlo perfettamente quando viene eseguito in modalità autonoma, non può leggerlo quando JMP viene avviato da PowersShell. Vorrei anche evitare di scrivere questa stringa in un file dallo script Powershell solo per leggerla dallo script JSL. Forse c'è un modo per passare quella stringa allo script? O forse dovrei usare Start-Process in un modo diverso in modo che JMP possa leggere la variabile Environmenta?
Automazione e scriptingRe: Passare l'argomento quando si esegue lo script dalla riga di comandoIn realtà l'ho impostato così:
[System.Environment]::SetEnvironmentVariable('scriptArg', 'Hello From PowerShell', 'User')...solo perché, a quanto ho capito, quando lo imposti in questo modo:
$Env:ScriptArg = "Hello from PowerShell";
non persiste oltre la sessione di PowerShell e quando lo stavo testando utilizzando gli strumenti di Windows, ho riscontrato un comportamento strano. Tuttavia, non ho nemmeno bisogno che persista oltre la sessione: all'interno della sessione va benissimo, quindi probabilmente tornerò alla tua (e alla mia opzione iniziale), ora che l'ho testata di nuovo.
Grazie!
Re: Passare l'argomento quando si esegue lo script dalla riga di comandoPuoi mostrarci come stai impostando la variabile d'ambiente?
Questo funziona per me:
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
prova.jsl:
Open Log();
myvar = Get Environment Variable("ScriptArg");
print(myvar);
Avviato startjmp da PS
Output del registro in JMP:
Open Log();
myvar = Get Environment Variable("ScriptArg");
print(myvar);
/*:
"Hello from PowerShell"
Grazie per il ping @Craige_Hales
Re: Passare l'argomento quando si esegue lo script dalla riga di comando@jschroedl
Re: Passare l'argomento quando si esegue lo script dalla riga di comandoSì, ho visto quel post. Come ho detto, per qualche motivo JMP non è in grado di leggere la variabile ambientale quando viene avviato dallo script PowerShell.Re: Passare l'argomento quando si esegue lo script dalla riga di comandostessa idea, più o meno:
Argomenti Jmp.exe
Re: Passare l'argomento quando si esegue lo script dalla riga di comandoOK,
Per ora faccio così:
'myVariable = "{0}";' -f $variableToPassToJMP | Out-File "./paths.jsl"
Start-Process -FilePath $JMP_path -ArgumentList ("`""+$JMPScriptPath+"`"") -Wait
Remove-Item -Path "./paths.jsl" -Force -Confirm:$falseNon molto elegante, ma funziona
Agg.: Oh, nello script JSL stesso faccio semplicemente questo:
Include("paths.jsl");