2016-03-08 68 views
0

我想執行「永遠」遠程命令使用PowerShell,但我得到的錯誤如何遠程執行遠程命令而不使用完整路徑?

'forever' is not recognized as an internal or external command

下面是我在做什麼。我有執行永久命令的節點js腳本「MyNodeScript.js」。該腳本位於WebServer 「MyWebServer1」上。 Node.Js和Forever全局安裝在MyWebServer1上。

var exec = require('child_process').exec; 
    var _ = require('underscore'); 
    var winston = require('winston'); 
    var async = require('async'); 

    var mycommand = 'forever -p ./logs --sourceDir ../wf_manager --workingDir ../wf_manager start -a --uid "ServiceApp" ServiceApp.js' 

    function start(callback) { 
     async.waterfall([ 
      function (cb) { 
       executeCommand(mycommand, false, cb); 
      } 
     ], function done(err) { 
      if (err) { 
       winston.error('failed to start all instances by forever:' + err); 
      } else { 
       winston.info('successfully started all instances by forever'); 
      } 
      callback(); 
     }); 
    } 

    function executeCommand(command, skip, callback) { 
     async.waterfall([ 
      function (cb) { 
       exec(command, cb); 
      } 
     ], function done(err) { 
      if (err) { 
       if (skip) { 
        // skip the error 
        callback(null); 
       } else { 
        callback(err); 
       } 
      } else { 
       callback(null); 
      } 
     }); 
    } 

    module.exports = { 
     executeCommand: executeCommand,  
     start: start 
    } 

    start(function(){}); 

MyWebServer1同一文件夾下,我有一個PowerShell腳本「MyPowerShellScript.ps1」,它把這個節點腳本。 PowerShell腳本只有一行

node D:\myfolder\maintenance\MyNodeScript.js 

我可以MyWebServer1本地運行此PowerShell腳本,它工作正常。但是,當我試圖從遠程計算機上執行此PowerShell腳本如下

invoke-command -computername MyWebServer1 -filepath \\MyWebServer1\MyFolder\maintenance\MyPowerShellScript.ps1 

我收到錯誤

error: failed to start all instances by forever:Error: Command failed: C:\Windows\system32\cmd.exe /s /c "forever -p ./logs --sourceDir ../wf_manager --workingDir ../wf_manager start -a --uid "ServiceApp" ServiceApp.js"
+ CategoryInfo : NotSpecified: (error: failed t...ServiceApp.js":String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName : MyWebServer1
'forever' is not recognized as an internal or external command, operable program or batch file.

請注意,我可以遠程執行該腳本沒有任何錯誤,如果我更新「 MyNodeScript.js」,並使用完整的物理路徑,永遠指揮

var mycommand = 'C:\\Users\\admin\\AppData\\Roaming\\npm\\forever -p ./logs --sourceDir ../wf_manager --workingDir ../wf_manager start -a --uid "ServiceApp" ServiceApp.js' 

但是我想用永遠的命令。路徑已經被添加作爲環境變量上MyWebServer1

回答

0

嘗試調用PS1文件是這樣的:

Invoke-Command -Scriptblock {powershell.exe -command {d:\blah\MyPowershellscript.ps1 } } 

通過-FilePath您指定要遠程執行本地腳本文件。由於您的腳本存在於目標系統上,因此可以省略該腳本。

+0

我收到錯誤「powershell.exe:術語」節點「不被識別爲cmdlet,函數,腳本文件或可操作程序的名稱。檢查名稱的拼寫,或者如果包含路徑,驗證路徑是否正確,然後再試一次。「這裏是我試過的命令「Invoke-Command-Scriptblock {powershell.exe -command {\ MyWebServer1 \ MyFolder \ maintenance \ MyPowerShellScript.ps1}}」 – LP13

+0

注意MyPowerShellScript.ps1在遠程機器上(即MyWebServer1)和\\ MyWebServer1 \ MyFolder \ i共享文件夾,以便其他機器可以訪問上述建議中的所有文件 – LP13

+0

它如何知道哪個遠程機器MyPowershellscript.ps1存在?我們不得不添加 - 計算機名稱開關 – LP13