【问题标题】:How do I reference my powershell scripts in my electron application after building and packaging?构建和打包后如何在电子应用程序中引用我的 powershell 脚本?
【发布时间】:2018-12-11 07:54:43
【问题描述】:

我制作了一个 Electron 应用程序,主要是为我的服务台同事工作。

它的作用(上下文):

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

为此,我使用了以下组合:

  • 带电子的节点
  • 反应
  • 节点-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); (node-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 文件复制到另一个目录?从来没有用过。这可能是一个可能的解决方案吗?如果是,如何最好地解决这个问题?

更新 当我将src 文件夹从C:\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

!谢谢!

【问题讨论】:

    标签: node.js electron


    【解决方案1】:

    我正在做类似的事情,但我用于 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 一样调用它们,我目前没有可以共享的任何内容。

    【讨论】:

    • 感谢您的回答。听起来很有趣。请进一步解释你是如何做到这一点的?你在github上有一个例子或类似的东西吗?谢谢
    • @GeraltDieSocke 更新原始回复,希望它更有用
    猜你喜欢
    • 2017-10-14
    • 2016-12-10
    • 1970-01-01
    • 2017-02-04
    • 2017-04-19
    • 2020-05-25
    • 1970-01-01
    • 2017-06-07
    • 2021-02-11
    相关资源
    最近更新 更多