//////////////////////////////////////////////////////////////////////// // Powershell Interface API /////////////////////////////////////////////////////////////////////// var SHELL = require("lib/shell"); var PowershellObject = function() { this.execType = "ps1"; this.dataType = -1; this.target = null; this.setExecType = function(execType) { this.execType = execType; return this; }; this.load = function(script) { this.target = script; this.dataType = 0; return this; }; this.loadCommand = function(command) { this.target = command; this.dataType = 1; return this; }; this.loadFile = function(filename) { this.target = filename; this.dataType = 2; return this; }; this.loadUrl = function(url) { this.target = url; this.dataType = 3; return this; }; // For example: // file:C:\\a\\b\\c // http:// // https:// // data:text/plain;base64,SGVsbG8sIFdvcmxkIQ== this.loadURI = function(uri) { var pos = uri.indexOf(':'); var scheme = (pos < 0 ? '' : url.substring(0, pos)); var target = (pos < 0 ? uri : url.substring(pos + 1)); switch (scheme) { case 'http': case 'https': this.loadUrl(target); break; case 'file': this.loadFile(target); break; case 'data': this.load(target); break; default: console.error("Invalid scheme"); } return this; }; this.build = function(args) { if (this.execType != "ps1") { console.warn("The execType is not set 'ps1'. Will be forward it to the default shell."); return SHELL.build(this.target); } var cmd = [ "powershell.exe", "-NoProfile", "-ExecutionPolicy", "ByPass", "-nologo" ]; // default arguments switch (this.dataType) { case 3: // dataType: URL(3)\ // todo break; case 2: // dataType: file(2) cmd.push("-file"); cmd.push(this.target + ".ps1"); break; case 1: // dataType: command(1) cmd.push("-Command"); if (typeof this.target === "string") { cmd.push("& {" + this.target + "}"); } else { cmd.push("& {" + SHELL.build(this.target) + "}"); } break; case 0: // dataType: script(0) // todo break; default: break; } if (typeof(cmd) !== "undefined") { cmd = cmd.concat(args); } return cmd; }; this.exec = function(args) { return SHELL.exec(this.build(args)); }; this.runAs = function(args) { return this.exec("Start-Process cmd \"/q /c " + SHELL.addslashes(this.build(args)) + "\" -Verb RunAs"); }; } function create() { return new PowershellObject(); } function execScript(scriptName, args) { return create().loadFile(scriptName).exec(args); } function execCommand(cmd) { return create().loadCommand(cmd).exec(); } function runAs(cmd) { return create().setExecType("cmd").runAs(); } exports.execScript = execScript; exports.execCommand = execCommand; exports.runAs = runAs; exports.VERSIONINFO = "Powershell Interface (powershell.js) version 0.1.3"; exports.AUTHOR = "abuse@catswords.net"; exports.global = global; exports.require = global.require;