如何使用SystemWorker执行PowerShell命令?

时间:2015-06-04 14:12:16

标签: javascript powershell wakanda

我尝试使用Wakanda服务器端API的SystemWorker来实现某些功能。但我无法实现它。我确定我遗漏了SystemWorker的工作流程。

我想从Windows启动PowerShell,然后在里面运行两个命令。要手动执行此操作,我只需在 cmd.exe 中运行powershell,然后我就可以开始编写PowerShell命令并获取我的数据。

在Wakanda,我使用该代码设置了 ssjs 文件:

var powershell = new SystemWorker(['powershell'],null);

powershell.postMessage('Add-Type -AssemblyName "PresentationCore"');
powershell.endOfInput();
powershell.postMessage('[Windows.Media.Fonts]::SystemFontFamilies');
powershell.endOfInput();

powershell.onmessage = function (event) {
    var data = event.data;
    debugger;
};
powershell.onerror = function (event) {
    debugger;
};
powershell.onterminated = function (event) {
    // potentially check event.exitStatus or event.forced
    debugger;
    exitWait();
};
wait();

我还有一个 systemWorkers.json 文件,其中包含:

[
    {
        "name" : "powershell",
        "executable" :
        [
            { "path" : "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" }
        ]
    }
]

我只想在PowerShell中执行两个命令Add-Type -AssemblyName "PresentationCore"[Windows.Media.Fonts]::SystemFontFamilies,以获取计算机上所有可用字体的列表。

如果我查看任务管理器,PowerShell会启动,但我从未实现执行我的两个命令行或取回数据。我只能在onterminated回调中结束。

我缺少什么?

1 个答案:

答案 0 :(得分:1)

最后,我努力使其发挥作用。

现在我将我的命令放在一个ps1文件中,我将其作为SystemWorker的参数

所以看起来像这样:

var powershell = new SystemWorker(['powershell "C:/Users/<MyName>/Desktop/<myScript>.ps1"'],null);

powershell.onmessage = function (event) {

};
powershell.onerror = function (event) {
};
powershell.onterminated = function (event) {
    exitWait();
};
wait();

我认为这样做更容易,所以我的所有命令都在一个文件中然后我只是要求系统工作人员执行PowerShell并运行我的脚本。