如何使用Gulp在不同的文件夹中调用Powershell脚本

时间:2018-01-24 20:01:21

标签: node.js powershell gulp

我能够毫无问题地实施Same jar in DRS map entry 2。现在,我的任务(下方)已从./tasks/database-publish.js移至var exec = require('child_process').exec。在此任务中,我使用../DbDeploy.ps1运行一个Powershell(PS1),我写的相对于新的gulp-task文件,它位于gulp.task("zzz_Run-DB-Deply", function(callback) { console.log('running db deploy'); plugins.exec('Powershell.exe -executionpolicy remotesigned -File ..\DbDeploy.ps1', function (err, stdout, stderr) { console.log(stdout); callback(err); }); });

在此任务中,我正在执行我的ps1 Splitting gulpfile into multiple file

Powershell.exe  -executionpolicy remotesigned -File  ..\DbDeploy.ps1

如果我在task目录中的Powershell中运行zzz_Run-DB-Deploy,它可以正常工作。但是,当我运行..\DbDeploy.ps1任务时,我不断获得异常:

  

流程终止于代码0

我怀疑\D。我认为{{1}}被用作转义字符。但我不确定。我做错了什么?

1 个答案:

答案 0 :(得分:1)

找到解决方案。问题在于将pluginsgulpfile.js转移到tasks/gulp-task.js

为了给每个人一些上下文,最好将任务粘贴到此处。我虽然可以使用tasks变量将所有引用的插件发送到我的plugins文件夹。不幸的是,我错了。

module.exports = function (gulp, config, plugins) {
    'use strict';
    console.log('Starting the database migration.');
    var exec = require('child_process').exec;

    gulp.task("zzz_Run-DB-Deply",
        function(callback) {
            console.log('running db deploy');
            exec("Powershell.exe  -executionpolicy remotesigned -File  ..\DbDeploy.ps1",
                function (err, stdout, stderr) {
                    console.log(stderr);
                    console.log(stdout);
                    console.log(err);
                    callback(err);
                });
        });
    gulp.task("Build-DB-Project",
        function (callback) {
            console.log('running build DB project');
            var targets = ["Build"];
            if (config.runCleanBuilds) {
                targets = ["Clean", "Build"];
            }
            return gulp.src("./Project/*.csproj")
                .pipe(plugins.foreach(function (stream, file) {
                    return stream
                        .pipe(plugins.debug({ title: "Building" }))
                        .pipe(plugins.msbuild({
                            targets: targets,
                            configuration: config.buildConfiguration,
                            logCommand: false,
                            verbosity: "minimal",
                            stdout: true,
                            errorOnFail: true,
                            maxcpucount: config.maxCpuCount,
                            toolsVersion: config.toolsVersion
                        }));
                }));
        });

}

为了解决此问题,我添加了一个引用exe的新var exec = require('child_process').exec;变量。此时,运行exec("Powershell.exe pwd")向我显示我的工作目录实际上是我项目的根目录其中gulpfile.jsDbDeploy.ps1都存在。因此,我知道要将文件路径从../DbDeploy.ps1更改为DbDeploy.ps

exec("Powershell.exe  -executionpolicy remotesigned -File  DbDeploy.ps1",
                function (err, stdout, stderr) {
                    console.log(stderr);
                    console.log(stdout);
                    console.log(err);
                    callback(err);
                });