使用powershell中的参数运行java.exe

使用powershell中的参数运行java.exe,java,powershell,arguments,wlst,Java,Powershell,Arguments,Wlst,我正在尝试从powershell调用wlst/jython/python 是否在正确的会话中未设置setWLSEnv.cmd设置类路径?所以我尝试将-cp设置为参数 & C:\bea\tpc\weblogic1033\server\bin\setWLSEnv.cmd; $cp='C:\bea\tpc\WEBLOG~1\server\lib\weblogic.jar' $wlst='weblogic.WLST' $script='C:\domains\tpc\Domain\bin\sta

我正在尝试从powershell调用wlst/jython/python

是否在正确的会话中未设置setWLSEnv.cmd设置类路径?所以我尝试将-cp设置为参数

& C:\bea\tpc\weblogic1033\server\bin\setWLSEnv.cmd; 
$cp='C:\bea\tpc\WEBLOG~1\server\lib\weblogic.jar'
$wlst='weblogic.WLST'
$script='C:\domains\tpc\Domain\bin\status.py'
$java="C:\PROGRA~1\Java\JROCKI~1.0\bin\java"
& "$java $cp $wlst $script"
#or
. "`"$java`" -cp `"$cp`" $wlst `"$script`""
#or
& "`"$java`" -cp `"$cp`" $wlst `"$script`""
我尝试过以各种方式引用命令字符串,但没有成功

术语“C:\PROGRA~1\Java\JROCKI~1.0\bin\Java”-cp“C:\bea\tpc\WEBLOG~1\server\lib\weblogic.jar”weblogic.WLST“C:\domains\tpc\SasTT pcDomain\bin\status.py“”不能识别为cmdlet、函数、脚本文件或可操作程序的名称。检查单词的拼写 名称,或者如果包含路径,请验证路径是否正确,然后重试。 在C:\u WORK\SAS\statusAll.ps1:15字符:2
+ . 当您使用呼叫操作员
&
时,下一个标记需要是命令名,而不是其他任何内容。因此,与此相反:

& "$java $cp $wlst $script"
试试这个:

& $java $cp $wlst $script
有时候,与本地前任争论会变得很难看。如果您的任何参数来自用户输入,则通常有效但不安全的技术是:

Invoke-Expression "$java $cp $wlst $script"

除了将命令格式化为字符串的问题之外,
setWLSEnv.cmd
是Windows命令提示符的脚本。PowerShell无法执行此文件;它不知道如何解释它,就像记事本不知道如何解释docx文件一样。Windows将.cmd文件与命令提示符相关联,因此第一行相当于

& cmd.exe /c C:\bea\tpc\weblogic1033\server\bin\setWLSEnv.cmd
(请注意,分号是不必要的,因为同一行上没有任何其他命令。)

这将使用cmd.exe创建一个新进程。这个新进程执行批处理文件,设置预期的环境变量,然后进程退出,放弃环境更改


如果在执行程序之前需要
setWLSEnv.cmd
设置环境变量,则应该编写一个批处理文件来调用它,而不是PowerShell脚本。否则,您将需要找到或编写一个与PowerShell等效的工具来设置您的环境。

如我所想。我只是希望有一些魔法可以迫使它在正确的会话中执行,就像在unix
中一样/env.sh
作为替代,您可以在PowerShell社区扩展()中使用
Invoke BatchFile
命令,该命令将执行批处理文件并将环境更改传播回PowerShell进程。@reneh PowerShell确实有一个等效的,但它仅适用于PowerShell文件,就像sh一样,派生词只能解释用方言编写的文件。这并不是说PowerShell缺少功能;PowerShell和命令提示符是两种非常非常不同类型的命令行shell。要求PowerShell运行.cmd文件有点像要求sh派生程序运行批处理文件。