如何在不使用完整路径的情况下远程执行远程命令?

时间:2016-03-08 18:12:13

标签: node.js powershell forever

我正在尝试使用powershell远程执行“forever”命令但是我收到了错误

  

'forever'未被识别为内部或外部命令

这是我正在做的事情。我有节点js脚本“MyNodeScript.js”,它执行forever命令。该脚本位于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 上,我有一个名为“MyPowerShellScript.ps1”的powershell脚本,它调用此节点脚本。 powershell脚本只有一行

node D:\myfolder\maintenance\MyNodeScript.js

我可以在MyWebServer1上本地运行这个powershell脚本,它运行正常。但是,当我尝试执行此PowerShell脚本时,如下面的来自远程计算机

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

我收到错误

  

错误:永远无法启动所有实例:错误:命令失败:   C:\ Windows \ system32 \ cmd.exe / s / c“forever -p ./logs --sourceDir   ../wf_manager --workingDir ../wf_manager start -a --uid“ServiceApp”   ServiceApp.js“
      + CategoryInfo:NotSpecified :(错误:失败t ... ServiceApp.js“:String)[],RemoteException
      + FullyQualifiedErrorId:NativeCommandError
      + PSComputerName:MyWebServer1
  'forever'不被认为是内部或外部命令,可操作程序或   批处理文件。

请注意,如果我更新“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上添加为环境变量

1 个答案:

答案 0 :(得分:0)

尝试像这样调用ps1文件:

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

通过-filepath指定应远程执行的本地脚本文件。由于您的脚本存在于目标系统上,您可以省略它。