【问题标题】:run java.exe with arguments from powershell使用 powershell 的参数运行 java.exe
【发布时间】:2013-01-14 16:41:08
【问题描述】:

我正在尝试从 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:\域\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

【问题讨论】:

    标签: java powershell arguments wlst


    【解决方案1】:

    当您使用呼叫运算符& 时,下一个标记必须是命令的名称,而不是其他任何内容。所以不要这样:

    & "$java $cp $wlst $script"
    

    试试这个:

    & $java $cp $wlst $script
    

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

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

    【讨论】:

      【解决方案2】:

      除了将命令格式化为字符串的问题之外,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 社区扩展 (pscx.codeplex.com) 中使用 Invoke-BatchFile 命令,该命令将执行批处理文件并将环境更改传播回 PowerShell 进程。
      • @ReneHH PowerShell 确实有一个等价物,但它只适用于 PowerShell 文件,就像 sh-derivatives 只能解释用其方言编写的文件一样。并不是 PowerShell 缺少功能;而是PowerShell 和命令提示符是两种非常非常不同类型的命令行 shell。让 PowerShell 运行 .cmd 文件有点像让 sh-derivative 运行批处理文件。
      猜你喜欢
      • 1970-01-01
      • 2013-05-19
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 2019-11-28
      • 1970-01-01
      • 2017-11-17
      相关资源
      最近更新 更多