2016-03-24 15 views
3

Uygulamamızı oluşturmak ve dağıtmak için gulp kullanıyorum. Bir PowerShell komut dosyası "publish.ps1" aramak zorunda inşa, nasıl yudumda diyebilirsin Ancak sonraGrid'den bir PowerShell betiği nasıl çalıştırılır?

var msbuild = require('gulp-msbuild'); 
gulp.task('build', ['clean'], function() { 
return gulp.src('../../*.sln') 
    .pipe(msbuild({ 
     toolsVersion: 14.0, 
     targets: ['Rebuild'], 
     errorOnFail: true, 
     properties: { 
      DeployOnBuild: true, 
      DeployTarget: 'Package', 
      PublishProfile: 'Development' 
     }, 
     maxBuffer: 2048 * 1024, 
     stderr: true, 
     stdout: true, 
     fileLoggerParameters: 'LogFile=Build.log;Append;Verbosity=detailed', 
    })); 
}); 

?

+0

sadece düğümü kullanabilirsiniz kaldırın. Muhtemel kopya: http://stackoverflow.com/a/10181488/197472 – Barryman9000

+0

@ Barryman9000, derleme görevimden sonra kodu ekleyebilir miyim? –

+0

sadece bir başka görevi çalıştırabildikten sonra powershell/node kodu – Barryman9000

cevap

9

Bunu test etmedim, ancak ikisini birleştirirseniz, bunun gibi bir şey olurdu. bağımlılık sırasını yönetmek için çalışma dizisini kullanan varsayılan görevi çalıştırmanız yeterlidir.

var gulp = require('gulp'), 
     runSequence = require('run-sequence'), 
     msbuild = require('gulp-msbuild'), 
     spawn = require("child_process").spawn, 
     child; 

    gulp.task('default', function(){ 
     runSequence('clean', 'build', 'powershell'); 
    }); 

    gulp.task('build', ['clean'], function() { 
     return gulp.src('../../*.sln') 
      .pipe(msbuild({ 
       toolsVersion: 14.0, 
       targets: ['Rebuild'], 
       errorOnFail: true, 
       properties: { 
        DeployOnBuild: true, 
        DeployTarget: 'Package', 
        PublishProfile: 'Development' 
       }, 
       maxBuffer: 2048 * 1024, 
       stderr: true, 
       stdout: true, 
       fileLoggerParameters: 'LogFile=Build.log;Append;Verbosity=detailed', 
      })); 
    }); 

    gulp.task('powershell', function(callback){ 
     child = spawn("powershell.exe",["c:\\temp\\helloworld.ps1"]); 
     child.stdout.on("data",function(data){ 
      console.log("Powershell Data: " + data); 
     }); 
     child.stderr.on("data",function(data){ 
      console.log("Powershell Errors: " + data); 
     }); 
     child.on("exit",function(){ 
      console.log("Powershell Script finished"); 
     }); 
     child.stdin.end(); //end input 
     callback(); 
    }); 

DÜZENLEME

Çağrı parametrelerle bir powershell dosyası

var exec = require('child_process').exec; 

gulp.task('powershell', function (callback) { 
    exec('Powershell.exe -executionpolicy remotesigned -File file.ps1', function(err, stdout, stderr){ 
    console.log(stdout); 
    callback(err) 
}); 

}); Çözümünüz

Write-Host 'hello'

DÜZENLEME 2

Tamam, bir deneme daha kök

Powershell file.ps1. Paramları/argümanları dosya.ps1'e koyabilir misin?

function Write-Stuff($arg1, $arg2){ 
    Write-Output $arg1; 
    Write-Output $arg2; 
} 
Write-Stuff -arg1 "hello" -arg2 "See Ya" 

DÜZENLEME

3 yudum görevden params'ı geçirin ::

gulp.task('powershell', function (callback) { 
    exec("Powershell.exe -executionpolicy remotesigned . .\\file.ps1; Write-Stuff -arg1 'My first param' -arg2 'second one here'" , function(err, stdout, stderr){ 
     console.log(stdout); 
     callback(err) 
    }); 
}); 

Güncelleme file.ps1

function Write-Stuff([string]$arg1, [string]$arg2){ 
    Write-Output $arg1; 
    Write-Output $arg2; 
} 
+0

PowerShell betiğimde argüman olarak bazı parametreler gerekiyor. Bununla nasıl başa çıkacağından emin değilim. –

+0

Bu paramları görevinize ekleyebilirsiniz. – Barryman9000

+0

Böyle 'işlevi Yayınla-AspNetDocker { [cmdletbinding (SupportsShouldProcess = $ true)] param ( [Parametresi (Zorunlu = $ true Pozisyon = 0)] [allowNull()] $ gibi argümanlar demek benim düzenlemeyi bakın publishProperties, [parametresi (zorunlu = $ true, pozisyon = 1)] $ packOutput, [parametresi (zorunlu = $ false, pozisyon = 2)] benim zayıflık için özür harika $ pubxmlFile ) ' –