Reputation: 57
I'm trying to runs specific parameterized powershell scripts. Below is a working example
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
Here is an example ps script
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
But I need to be able to pass the variables as the arguments for the ps script. I thought this would work.
var str2 = "\"c:\\test\\mypstest.ps1 -arg1";
var str3 = " 1\"";
var mystr1 = str2.concat(str3);
child = spawn("powershell.exe",[mystr1]);
I also tried
function myfunc1(param1, param2){
var mystr1 = str2.concat(str3);
//console.log(mystr1);
return mystr1;
};
child = spawn("powershell.exe",[myfunc1(str2, str3)]);
But i appear to be passed back the variable itself, below is the output i get from the console
Powershell Data: c:\test\mypstest.ps1 -arg1 1
Powershell Script finished
And tried this
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));
for the above i get an exception
events.js:72 throw er; // Unhandled 'error' event Error: spawn ENOENT at errnoException (child_process.js:998:11) at Process.ChildProcess._handle.onexit (child_process.js:789:34)
i'm not fluent in js so any help would be appreciated
Upvotes: 1
Views: 4625
Reputation: 180917
var str2 = "\"c:\\test\\mypstest.ps1 -arg1";
var str3 = " 1\"";
var mystr1 = str2.concat(str3);
...will generate the resulting string;
"c:\test\mypstest.ps1 -arg1 1"
...while what you want according to your working version is an un-quoted version;
c:\test\mypstest.ps1 -arg1 1
Remove the extra quotes from your string, and it should be equivalent with your working example.
Upvotes: 2