构建和打包后,如何在我的电子应用程序中引用我的powershell脚本?

时间:2018-07-03 05:22:48

标签: node.js electron

我已经提出了电子申请,主要是为我的服务台同事提供的。

它的作用(上下文):

它提供了一个简单的GUI,它可以执行不同的“任务”。示例:

enter image description here

为此,我使用以下组合:

  • 带电子的节点
  • 反应
  • 节点Powershell

问题:

当我在“开发模式”中运行该应用程序时,该应用程序正在正常运行。但是,在用电子构建并打包后,NPM打包node-powershell不再能找到.ps1脚本了。 我想我已经确定了问题,但是我不知道该问题的解决方案是什么。 node-powershell需要脚本路径和命令数组。 我已经这样设置了:

    const p1 = require('path').resolve();
    const scriptPath = require('path').join(p1, 'src/PowershellScripts/AddMailboxPermissions.ps1');

然后是ps.addCommand(scriptPath, commands);(节点Powershell)

如前所述,这在Webpack服务器的开发模式下可以正常工作,但是在打包后运行时出现此错误:

  

找不到C:\ Users \ Huberdo \ Projekte \ Powershell-SAS-App \ Client \ builds \ basic-electron-react-boilerplate-win32-x64 \ src \ PowershellScripts \ GetRemoteMac.ps1。

原因是因为包装具有以下结构。 .ps1文件现在具有以下路径:

  

C:\ Users \ Huberdo \ Projekte \ Powershell-SAS-App \ Client \ builds \ basic-electron-react-boilerplate-win32-x64 \ resources \ app \ src \ PowershellScripts

所以这是主要问题。我如何打包这种“正确的方式”,以便以后可以正常工作。

信息:

  • 我在Windows 10 x64计算机上运行
  • package.json脚本:
    • "dev": "webpack-dev-server --hot --host 0.0.0.0 --config=./webpack.dev.config.js", "build": "webpack --config webpack.build.config.js", "package": "webpack --config webpack.build.config.js",
  • 当我在开发人员模式下运行它时,它会解析正确的路径,并且一切都很好

我希望你们中的某人可以帮助我或指导我朝正确的方向发展。

可能的想法:

引用完全不同的路径,并使用gulp任务将ps1文件复制到另一个目录中吗?没用过。这可能是解决方案吗?如果是,如何最好地解决这个问题?

更新 当我从srcC:\Users\Huberdo\Projekte\Powershell-SAS-App\Client\builds\basic-electron-react-boilerplate-win32-x64\resources\app文件夹复制到根C:\Users\Huberdo\Projekte\Powershell-SAS-App\Client\builds\basic-electron-react-boilerplate-win32-x64时,它又可以工作了。所以这主要是路径问题,我不知道如何解决。

最后但并非最不重要的直接链接到github上的项目:

https://github.com/dhuber666/Powershell-SAS-Tool

在这里我叫ps1脚本:

https://github.com/dhuber666/Powershell-SAS-Tool/blob/SendAs/src/components/scriptsComponents/AddMailboxPermissions.js

!谢谢!

1 个答案:

答案 0 :(得分:0)

我正在做类似的事情,但是我用于PowerShell脚本的方法是将它们创建为PowerShell模块。然后,您可以将它们放在有效的PSModule位置之一中,这样就可以了。您只需编写一个powershell脚本即可将模块复制到正确的位置,然后将软件包复制到桌面或任何需要的位置。

一个非常简单的模块可能是这样的:

C:\ Program Files \ WindowsPowerShell \ Modules 中,创建一个名为 MyModuleTest 的文件夹。在此文件夹中创建一个名为 MyModuleTest.psm1 的文件。在此PSM1文件中,创建一个函数,例如

function Invoke-MyModuleTest {

Write-host "This is My Module"

}

保存文件,打开Powershell控制台会话,然后如果运行Invoke-MyModuleTest,它将输出到控制台。

您可以阅读有关模块here

的更多信息

您还可以找到一些更复杂的模块here

的漂亮示例。

将脚本转换为模块后,您就可以像调用任何cmdlet一样调用它们了,我目前没有什么可以共享的。