如何通过节点js将变量传递给powershell

时间:2014-05-21 15:18:59

标签: javascript node.js powershell

我正在尝试运行特定的参数化PowerShell脚本。以下是一个工作示例

var spawn = require("child_process").spawn,child;

child = spawn("powershell.exe",["c:\\test\\mypstest.ps1 -arg1 1"]);
     child.stdout.on("data",function(data){
     console.log("Powershell Data: " + data);
});
     child.stderr.on("data",function(data){
     console.log("Powershell Errors: " + data);
});
child.on("exit",function(){
     console.log("Powershell Script finished");
});

child.stdin.end(); //end input

这是一个示例ps脚本

param(
    [int]$arg1 = 0
    )

function test(){
    If ($arg1 -eq 0){
    write-host 'too bad'
    }

    If ($arg1 -eq 1){
        calc
    }

    If ($arg1 -eq 2){ 
        notepad
    }
}
test

但是我需要能够将变量作为ps脚本的参数传递。我认为这样可行。

var str2 = "\"c:\\test\\mypstest.ps1 -arg1";
var str3 = " 1\"";

var mystr1 = str2.concat(str3);

child = spawn("powershell.exe",[mystr1]);

我也试过

function myfunc1(param1, param2){
    var mystr1 = str2.concat(str3);
    //console.log(mystr1);
    return mystr1;
    };

child = spawn("powershell.exe",[myfunc1(str2, str3)]);

但我似乎传回了变量本身,下面是我从控制台获得的输出

Powershell数据:c:\ test \ mypstest.ps1 -arg1 1

Powershell脚本已完成

试过这个

var str1 = "\"powershell.exe\"\,";
var str2 = "\[\"c:\\test\\mypstest.ps1 -arg1";
var str3 = " 1\"\]";

function myfunc1(param1, param2, param3){
    var mystr1 = str1.concat(str2, str3);
    console.log(mystr1);
    return mystr1;
    };

child = spawn(myfunc1(str1, str2, str3));

以上我得到了一个例外

events.js:72 扔掉; //未处理的'错误'事件 错误:生成ENOENT at errnoException(child_process.js:998:11) at Process.ChildProcess._handle.onexit(child_process.js:789:34)

我不会说流利的js所以任何帮助都会受到赞赏

1 个答案:

答案 0 :(得分:0)

var str2 = "\"c:\\test\\mypstest.ps1 -arg1";
var str3 = " 1\"";

var mystr1 = str2.concat(str3);

...将生成结果字符串;

"c:\test\mypstest.ps1 -arg1 1"

...根据您的工作版本,您想要的是未引用的版本;

c:\test\mypstest.ps1 -arg1 1

从字符串中删除多余的引号,它应与您的工作示例等效。