0

我正在尝试从 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:\ domain\tpc\SasTT pcDomain\bin\status.py"' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 C:_WORK_\SAS\statusAll.ps1:15 char:2 + 。<<<< " "$java" -cp "$cp" $wlst "$script"" + CategoryInfo : ObjectNotFound: ("C:\PROGRA~1\Ja...\bin\status.py":String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

4

2 回答 2

1

当您使用 call operator&时,下一个标记必须是命令的名称,而不是其他任何东西。所以代替这个:

& "$java $cp $wlst $script"

试试这个:

& $java $cp $wlst $script

有时与本地 exe 争论会变得很丑陋。如果您的任何参数来自用户输入,则通常有效但不安全的技术是:

Invoke-Expression "$java $cp $wlst $script"
于 2013-01-14T16:53:27.243 回答
0

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

& cmd.exe /c C:\bea\tpc\weblogic1033\server\bin\setWLSEnv.cmd

(请注意,分号是不必要的,因为您在同一行上没有任何其他命令。)

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

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

于 2013-01-15T00:23:44.630 回答