我正在尝试运行特定的参数化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所以任何帮助都会受到赞赏
答案 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
从字符串中删除多余的引号,它应与您的工作示例等效。