从java运行pmcmd

时间:2017-10-05 18:14:54

标签: java informatica informatica-powercenter

我正在尝试运行pmcmd并从java传递参数。这是我的代码:

String cmd="C:\\Informatica\\9.6.1\\clients\\PowerCenterClient\\CommandLineUtilities\\PC\\server\\bin\\pmcmd.exe";
    final Process cmdProcess;

    cmdProcess = Runtime.getRuntime().exec(new String[]{cmd,"connect -sv IS_NAME -d DOMAIN_NAME -u USER -p PWD"});
    cmdProcess.getOutputStream().close();

问题是我无法获得所需的输出。我收到以下错误:

ERROR: Unknown command [connect]

当我在命令行上尝试相同的命令时,它可以工作。

pmcmd>connect -sv IS_NAME -d DOMAIN_NAME -u USER -p PWD

输出:

Connected to Integration Service:[IS_NAME].

谁能说出我在做什么错误?

3 个答案:

答案 0 :(得分:1)

(根据OP工作后添加我的评论作为答案)

您的命令行示例表明connect -sv ...是在pmcmd进程中发出的,而不是作为参数提供的。

所以你应该把它发送到进程'STDIN(由cmdProcess.getOutputStream()访问)而不是作为参数传递给调用。

答案 1 :(得分:0)

pmcmd有两种模式,命令行和交互式。 connect命令仅在交互模式下工作。

从java调用时,您使用的是命令行模式,不需要先连接。您可以直接调用要运行的命令(例如startWorkflow),并使用该命令提供连接参数,如下所示:

pmcmd startworkflow -sv MyIntService -d MyDomain -u seller3 -p jackson ‑f SalesEast wf_SalesAvg

更多详情here

答案 2 :(得分:0)

我必须在pmcmd进程中发出命令。所以我修改了我的代码并且它有效:

                String cmd="C:\\Informatica\\9.6.1\\clients\\PowerCenterClient\\CommandLineUtilities\\PC\\server\\bin\\pmcmd.exe";
                final Process cmdProcess;

                cmdProcess = Runtime.getRuntime().exec(new String[]{cmd,""});
                OutputStream out = cmdProcess.getOutputStream();
                out.write("connect  -sv IS_NAME -d DOMAIN_NAME -u USER -p PWD".getBytes());
                out.close;