2016-03-08 84 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